目前在C中实现TCP套接字。使用libcurl我发送带有一些XML文件的HTTP POST请求。连接和传输工作正常。
现在,当我尝试在同一会话中向服务器发送2个不同的XML文件时,我总是得到我发送的第一个传输的值。意思是我总是得到旧值,套接字不会返回套接字上收到的新值。
Wireshark向我展示了传输不同的XML文件。在每次建立TCP连接后,我是否需要以某种方式清理套接字?
这是我的服务器实现:
while (1) {
char buf[512];
connfd = accept(listenfd, (struct sockaddr*) NULL, NULL);
if (connfd == -1) {
perror("accept");
continue;
}
int rec;
rec = recv(connfd, buf, sizeof (buf), 0);
printf ("Receive val: %d\n", rec);
//DO STUFF
//Send back ACK
strcpy(sendBuff, "Received");
write(connfd, sendBuff, strlen(sendBuff));
close(connfd);
sleep(1);
}
答案 0 :(得分:0)
在收到第一个数据包后立即关闭会话。这就是你没有得到下一个数据包的原因。
您应该在一个单独的线程中处理每个传入连接,或者在关闭套接字之前以某种方式确保不再有传入的数据到达