使用Java实现TCP网路通信

TCP(Transmission Control Protocol)是在网路层的一种面向连接的通信协议。

TCP协议会在网路通信的两端各建立Socket对象,通信前要保证连接已建立。TCP是通过Socket产生IO流来进行网路通信的。

TCP连接的建立是通过三次挥手进行的。通过三次挥手的过程,客户端和服务器建立基于TCP协议的通信连接。

三次握手原理:

第1次握手: 客户端Client发送一个带有SYN(synchronize)的数据包给服务器Server

第2次握手: 服务器回复带有SYN和ACK(acknowledge)的数据包返回给客户端

第3次握手: 客户端回复ACK数据包给服务器,完成通信连接

在TCP通信结束之后,客户端想与服务器断开连接,则会通过四次握手来断开连接并清除在连接管道中的所有数据。

四次挥手原理:

第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态;

第2次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态;

第3次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态;

第4次挥手:客户端收到FIN后,客户端t进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手。
————————————————
版权声明:本文为CSDN博主「不脱发的程序猿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_38106923/article/details/108292454

Java实现

使用Java实现TCP的简单通信,首先在客户端中创建一个Socket对象,服务器地址为127.0.0.1,端口号是10000:

Socket socket = new Socket("127.0.0.1", 10000);

然后从连接通道中获取输出流,并写出数据:

OutputStream os = socket.getOutputStream();
os.write("你好啊".getBytes());

最后释放资源:

os.close();
socket.close();

紧接着是服务器端中,创建一个ServerSocket对象,端口号与客户端发送的端口号一致:

ServerSocket ss = new ServerSocket(10000);

然后用ServerSocket对象监听客户端连接,并保存结果至Socket对象中:

Socket socket = ss.accept();

下一步使用缓冲流将输入流的数据读取,并打印数据:

BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
int b;
while ((b = br.read()) != -1) {
     System.out.print((char) b);
}

最后是释放资源:

socket.close();
ss.close();

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿黄勇闯天涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值