- 编写TCP server和Client程序
- server端在accept之前调用setsockopt(slisten, SOL_SOCKET, SO_RCVBUF,(char*)&uiRcvBuf, uiRcvBufLen);将接收缓存设置为10K.
- cleint端在bind之前调用setsockopt(slisten, SOL_SOCKET, SO_SNDBUF,(char*)&uiSendBuf, uiSendBufLen);将发送缓存设置为10K
- cleint端调用send函数发送,相关代码如下:
int n = 50;
char sendData[1024];
int len = sizeof(sendData);
printf("sendlen = %u",len);
for (int i = 0;i < len; i++)
{
sendData[i] = 0x01;
}
while (n)
{
int iResult = send(sclient, sendData, len, 0 );
if (iResult == SOCKET_ERROR) {
printf("send failed with error: %d\n", WSAGetLastError());
getchar();
closesocket(sclient);
WSACleanup();
return 1;
}
n--;
printf("Bytes Sent: %d,%d\n", iResult,50-n);
}
疑问:
1. wireshark图中为什么在第一个红色框图的时候win才开始变化(win从10240变成7736)?这之前的数据是存在哪里的?不是接收缓存?不应该从接收第一个包开始就开始减少吗?
2. wireshark图中第一个红色框图为什么会有大于20k的数据(ack=21049)?
3. 为什么从wireshark看到server接收了20k多的数据,而不是10k?
4. cleint端为什么能够send出30k数据才停下来?