相关疑难解决方法(0)

我该如何标记TCP数据包的结尾?

在客户端/服务器应用程序中,不同长度的文本数据将在客户端和服务器之间来回发送,我应该如何标记正在发送的数据包的结尾?例如,当服务器从客户端接收分组数据时,服务器如何知道客户端分组已完全被接收?

是否更常见的是告诉服务器它将在数据之前接收的数据包的全长或是否有标记数据包末尾的内容?

发送的一些数据只有几个字符长,有些可能是数千个字符.

tcp packet

18
推荐指数
3
解决办法
2万
查看次数

tcp堆栈如何区分关闭和关闭?

我们知道:

////////////////////////////////////////////////// ///////

close()将终止tcp连接上的两个方向

shutdown()可以阻止一个或两个方向的通信

////////////////////////////////////////////////// ///////

在这里,让我困惑的是tcp stack如何区分它们?

我写了一个示例程序:

首先我使用:

....
connect(192.168.1.100) //there is a server process running in 192.168.1.100
....
close(socketfd);
sleep(1000);
Run Code Online (Sandbox Code Playgroud)

然后我使用wireshark来转储数据包:

01 -->syn

02 <--syn,ack

03 -->ack

04 -->fin,ack

05 <--ack
Run Code Online (Sandbox Code Playgroud)

netstat -an | grep 192.168.1.100

我已经运行了大约5分钟,它打印:

首先是"tcp 0 0 ... FIN_WAIT2",然后大约2分钟后没有输出,似乎连接已被破坏.

然后,我使用:

....
connect(192.168.1.100)
....
shutdown(socketfd,SHUT_WR);
sleep(1000);
Run Code Online (Sandbox Code Playgroud)

使用wireshark转储数据包:

01 - >同义词

02 < - syn,ack

03 - >确认

04 - > fin,ack

05 < - ack

...

netstat -an | grep 192.168.1.100

运行大约10分钟,它总是打印:"tcp 0 0 …

tcp

3
推荐指数
1
解决办法
4755
查看次数

标签 统计

tcp ×2

packet ×1