我正在尝试将客户端连接到服务器,但显示对等方重置了连接
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
答案 0 :(得分:1)
该错误表示您正在写入更多数据时,另一端已关闭连接。您是否可以在客户端上执行某些操作取决于接收方关闭连接的原因:
因此,第一步是查看远程计算机,看看日志文件中是否有任何错误。
另外两种情况是您的错误:您发送的数据过多或未正确实施协议。示例如下:服务器期望“字节数”,然后是N个字节的数据。您发送“ 8”,然后发送10个字节。 8个字节后,另一端将停止。
其他协议具有“退出”或“再见”命令,这些命令会导致另一端关闭连接。如果之后尝试发送更多数据,将失败。