TCP套接字实现总是给出旧值

时间:2015-08-20 07:52:14

标签: c sockets tcp

目前在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);
}

1 个答案:

答案 0 :(得分:0)

在收到第一个数据包后立即关闭会话。这就是你没有得到下一个数据包的原因。

您应该在一个单独的线程中处理每个传入连接,或者在关闭套接字之前以某种方式确保不再有传入的数据到达