在C中使用send()的第二次调用时出现问题

时间:2010-06-01 01:24:35

标签: c windows tcp client-server send

现在我正在使用一个简单的服务器,它从客户端接收一个引用某个操作的代码。服务器接收此数据并发回它正在等待正确数据的信号。

                   /*Server Side*/
                    if (codigoOperacao == 0)
                    {
                        printf("A escolha foi 0\n");
                        int bytesSent = SOCKET_ERROR;
                        char sendBuff[1080] = "0";
                        /*Here "send" returns an error msgm while trying to send back the signal*/
                        bytesSent = send(socketEscuta, sendBuff, 1080, 0);
                        if (bytesSent == SOCKET_ERROR)
                        {
                            printf("Erro ao enviar");
                            return 0;
                        }
                        else
                        {
                        printf("Bytes enviados : %d\n", bytesSent);
                        char structDesmontada[1080] = "";
                        bytesRecv = recebeMensagem(socketEscuta, structDesmontada);
                        printf("structDesmontada : %s", structDesmontada);
                        }
                    }

以下是负责发送操作代码和接收信号的客户端代码

                char sendMsg[1080] = "0";
            char recvMsg[1080] = "";
            bytesSent = send(socketCliente, sendMsg, sizeof(sendMsg), 0);
            printf("Enviei o codigo (%d)\n", bytesSent);
            /*Here the program blocks in a infinite loop since the server never send anything*/
            while (bytesRecv == SOCKET_ERROR)
            {
            bytesRecv = recv(socketCliente, recvMsg, 1080, 0);
            if (bytesRecv > 0)
            {
                printf("Recebeu\n");
            }

为什么仅在第二次尝试发送一些数据时才会发生这种情况?因为第一次调用send()工作正常。 希望有人可以帮忙! Thnks

1 个答案:

答案 0 :(得分:0)

我整理出来了。对于传入消息,第一个接收缓冲区很小并且它溢出,擦除了SOCKET socketEscuta变量。现在它工作正常。感谢您的提示!