如何修复C中对等方重置的连接

时间:2019-03-28 13:33:21

标签: c client-server

我正在尝试将客户端连接到服务器,但显示对等方重置了连接

printf("Client Sends    **** |Version = %2u | Packet Type = %2u | Packet Length = %d | ClientID = %d | **** \n", SendHeader.ProtocolVersion, SendHeader.PacketType,SendHeader.PacketLength, SendHeader.ClientId);
int ResultReceived = 0;
while (1) { 
    if ((recv(sockfd, &RecvHeader, sizeof(RecvHeader), 0)) <= 0) {
        perror("recv invalid Bet");
        close(sockfd);
        exit(1);
    }
    printf("\n\nClient Receiv`enter code `es **** |Version = %2u | Packet Type = %2u | Packet Length = %d | ClientID = %d | **** `enter code here`\n",RecvHeader.ProtocolVersion`RecvHeader.PacketType,RecvHeader.PacketLength, RecvHeader.ClientId);
    switch (RecvHeader.PacketType) {
        case BEGASEP_ACCEPT:
            printf("\n");
            Begasep_AcceptMsg AcceptMessage;
            if ((recv(sockfd, &AcceptMessage, sizeof(AcceptMessage), 0)) <= 0) {
                perror("recv");
                exit(1);

输出:

client: connecting to 127.0.0.1

Client Sends    **** |Version =  1 | Packet Type =  1 | Packet Length = 4 | ClientID = 0 |

**** recv invalid Bet: Connection reset by peer

1 个答案:

答案 0 :(得分:1)

该错误表示您正在写入更多数据时,另一端已关闭连接。您是否可以在客户端上执行某些操作取决于接收方关闭连接的原因:

  • 程序崩溃或重新启动
  • 它认为它有足够的数据
  • 您告诉它关闭连接,然后继续使用

因此,第一步是查看远程计算机,看看日志文件中是否有任何错误。

另外两种情况是您的错误:您发送的数据过多或未正确实施协议。示例如下:服务器期望“字节数”,然后是N个字节的数据。您发送“ 8”,然后发送10个字节。 8个字节后,另一端将停止。

其他协议具有“退出”或“再见”命令,这些命令会导致另一端关闭连接。如果之后尝试发送更多数据,将失败。