网络编程:socket—基于 TCP 协议编程|学习笔记

简介: 快速学习网络编程:socket—基于 TCP 协议编程

开发者学堂课程【大数据 ZooKeeper 快速入门 网络编程:socket—基于 TCP 协议编程】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/549/detail/7582


网络编程:socket—基于 TCP 协议编程


一、socket—基于 TCP 协议编程

Tcp最大的特点就是在于发送数据的时候不需要打包,需要建立链接,一旦建立链接成功之后就会形成数据传输的通道,就可以在通道中进行输入流和输出流来进行数据的发送和接收。客户端代码实现:客户端中 java 核心 API 叫做 socket,通过socket 构造客户端的 socket 对象,打开 idea 进行代码实现:

首先创建一个包 cn.itcast.socket.tcp

在包中创建客户端中的一个类:TCPSocketClient,Client 主要用于数据的发送。

流程:在客户端即发送数据端,第一步创建 socket 对象,对象是 socket 通信的基石,通过对象来指定发送数据的主机、目的地,通过建立之后,在对象当中形成数据传输的通道,就是所谓的输入流和输出流,在这个流当中进行数据的输入和输出。

代码实现思路:

创建客户端的 socket 服务核心类 Socket

1、在 socket 指定传输数据的目的ip和端口

2通过 socket 建立的通道输出数据

3、释放资源

public class TCPSocketclient {

//首先创建 main 方法,

public static void main(String[] args)throws Exception {

//创建客户端的 socket 服务Socket

//在 socket 指定传输数据的目的 ip 和端口,new 一个 socket 需要输入一些信息,分别是主机 ip(127.0.0.1)和地址(端口12321),这样就完成了客户端 socket 的建立以及端口的指定,发现代码中,直接抛出最大的一个异常 throws Exception

Socket client = new Socket( "127.0.0.1",12321);

//通过 socket 建立的通道输出数据

//取得输出流,写数据,从 client 包中调用 getOutputStream() 进行输出调用,最后封装给 outputstream

Outputstream outputstream = client.getOutputStream();

//通过 write 方法写出数据,这是需要一个 byte 数组,这样就通过 outputStream 完成了对数据的写出

outputStream.write( "hello,this is tcp".getBytes());

//释放资源

client.close();

}

以上完成了对客户端代码的书写,创建一个服务,通过对象获取一个输出流,之后通过写数据即可

服务端实现:

服务端

核心 API:ServerSocket

流程逻辑:

1. 创建 ServerSocket 服务,然后绑定在服务器的 IP 地址和端口

2. 监听连接请求

3. 如果有客户端接受请求,建立了 TCP 连接

4. 获取输入流读取数据,并显示

5. 释放资源

在服务端创建一个了类:TCPSocketServer

public class TCPSocketServer {

//首先创建 main 方法

public static voidmain ( String[]args) throws Exception{

//建立服务端 socket 服务  ServerSocket(注意服务端的核心API:ServerSocket)并且监听本机的一个端口,new 一个 ServerSocket 对象进行绑定本地端口,注意端口与客户端保持一致,若不一致将不能进行链接传输数据,然后进行抛出异常 throws Exception

ServerSocket server = new ServerSocket(12321);

//监听连接阻塞方法  有请求过来  建立连接  返回与之对应的 socket 来  通信,调用 accept(方法),阻塞:程序运行到这将会一直等待,如果没有客户端发送 socket 请求,就会一直停留在这,如果有请求就会进行反应一个请求,放回方法直接是一个 socket,封装给 s,然后由客户端和服务端的 socket 进行通信,ServerSocket 继续保持服务,

Socket  s = server.accept();

//获取输入流读取数据,然后就能写入数据,调用 getInputStream 方法进行输入,接收数据,返回为 Inputstream 类型

Inputstream inputStream = s.getInputStream();

//设置一个 byte 数组1024

Byte[] bys = new byte[1024];

//针对 inputStream 进行读取,调用 read 方法读取数据 bys,把数据存放到 len 中,因为读取的是长度 lenth

int len = inputstream.read (bys);

//sout 打印数据,从bys数组中第一个读取到最后(最大长度)

System.out.println( new String(bys,0,len));

//释放资源,打印完毕后需要进行关闭资源

s.close();

server .close();

}}

以上代码完成,右键进行运行测试:发现堵塞在那没有结束运行

接下来运行客户端程序:

hello,this is tcp

发现已经返回了结果,这样就完成了基于 TCP 协议的传输,重点需要明白协议的特点以及使用哪个 API 作为参数

相关文章
|
6月前
|
监控 负载均衡 安全
WebSocket网络编程深度实践:从协议原理到生产级应用
蒋星熠Jaxonic,技术宇宙中的星际旅人,以代码为舟、算法为帆,探索实时通信的无限可能。本文深入解析WebSocket协议原理、工程实践与架构设计,涵盖握手机制、心跳保活、集群部署、安全防护等核心内容,结合代码示例与架构图,助你构建稳定高效的实时应用,在二进制星河中谱写极客诗篇。
WebSocket网络编程深度实践:从协议原理到生产级应用
|
网络协议
TCP/IP与OPC协议的深度比较
总的来说,TCP/IP和OPC协议各有其优点和应用场景。TCP/IP协议是网络通信的基础,而OPC协议则是工业自动化领域的重要工具。在实际应用中,我们需要根据具体的需求和场景,选择合适的协议。
453 11
|
网络协议 物联网
VB6网络通信软件上位机开发,TCP网络通信,读写数据并处理,完整源码下载
本文介绍使用VB6开发网络通信上位机客户端程序,涵盖Winsock控件的引入与使用,包括连接服务端、发送数据(如通过`Winsock1.SendData`方法)及接收数据(利用`Winsock1_DataArrival`事件)。代码实现TCP网络通信,可读写并处理16进制数据,适用于自动化和工业控制领域。提供完整源码下载,适合学习VB6网络程序开发。 下载链接:[完整源码](http://xzios.cn:86/WJGL/DownLoadDetial?Id=20)
486 12
|
负载均衡 网络协议 算法
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
这网络层就像搭积木一样,上层协议都是基于下层协议搭出来的。不管是ping(用了ICMP协议)还是tcp本质上都是基于网络层IP协议的数据包,而到了物理层,都是二进制01串,都走网卡发出去了。 如果网络环境没发生变化,目的地又一样,那按道理说他们走的网络路径应该是一样的,什么情况下会不同呢? 我们就从路由这个话题聊起吧。
552 4
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
|
网络协议 测试技术 Linux
Golang 实现轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库
gev 是一个基于 epoll 和 kqueue 实现的高性能事件循环库,适用于 Linux 和 macOS(Windows 暂不支持)。它支持多核多线程、动态扩容的 Ring Buffer 读写缓冲区、异步读写和 SO_REUSEPORT 端口重用。gev 使用少量 goroutine,监听连接并处理读写事件。性能测试显示其在不同配置下表现优异。安装命令:`go get -u github.com/Allenxuxu/gev`。
335 0
|
网络协议
TCP报文格式全解析:网络小白变高手的必读指南
本文深入解析TCP报文格式,涵盖源端口、目的端口、序号、确认序号、首部长度、标志字段、窗口大小、检验和、紧急指针及选项字段。每个字段的作用和意义详尽说明,帮助理解TCP协议如何确保可靠的数据传输,是互联网通信的基石。通过学习这些内容,读者可以更好地掌握TCP的工作原理及其在网络中的应用。
|
网络协议 开发者 Python
深度探索Python Socket编程:从理论到实践,进阶篇带你领略网络编程的魅力!
【7月更文挑战第25天】在网络编程中, Python Socket编程因灵活性强而广受青睐。本文采用问答形式深入探讨其进阶技巧。**问题一**: Socket编程基于TCP/IP,通过创建Socket对象实现通信,支持客户端和服务器间的数据交换。**问题二**: 提升并发处理能力的方法包括多线程(适用于I/O密集型任务)、多进程(绕过GIL限制)和异步IO(asyncio)。**问题三**: 提供了一个使用asyncio库实现的异步Socket服务器示例,展示如何接收及响应客户端消息。通过这些内容,希望能激发读者对网络编程的兴趣并引导进一步探索。
318 4
|
网络协议 测试技术 网络安全
Python编程-Socket网络编程
Python编程-Socket网络编程
240 0
|
开发者 Python
Python Socket编程:不只是基础,更有进阶秘籍,让你的网络应用飞起来!
【7月更文挑战第25天】在网络应用蓬勃发展的数字时代,Python凭借其简洁的语法和强大的库支持成为开发高效应用的首选。本文通过实时聊天室案例,介绍了Python Socket编程的基础与进阶技巧,包括服务器与客户端的建立、数据交换等基础篇内容,以及使用多线程和异步IO提升性能的进阶篇。基础示例展示了服务器端监听连接请求、接收转发消息,客户端连接服务器并收发消息的过程。进阶部分讨论了如何利用Python的`threading`模块和`asyncio`库来处理多客户端连接,提高应用的并发处理能力和响应速度。掌握这些技能,能使开发者在网络编程领域更加游刃有余,构建出高性能的应用程序。
211 3
|
网络协议 Python
网络世界的建筑师:Python Socket编程基础与进阶,构建你的网络帝国!
【7月更文挑战第26天】在网络的数字宇宙中,Python Socket编程是开启网络世界大门的钥匙。本指南将引领你从基础到实战,成为网络世界的建筑师。
289 2

热门文章

最新文章

下一篇
开通oss服务