在TCP套接字连接期间获取对等方重置的连接?

阿琼高尔

我正在制作一个小型的客户端-服务器应用程序,其中服务器在接受后派生一个子进程,以便在客户端连接到该进程的同时进行多个连接,发送消息并接收响应。以下是我的代码片段:-client.c

字符缓冲区[256];

portno=5001;    
   
   /* Create a socket point */
   sockfd = socket(AF_INET, SOCK_STREAM, 0);
   
   if (sockfd < 0) {
      perror("ERROR opening socket");
      exit(1);
   }
    
   
   bzero((char *) &serv_addr, sizeof(serv_addr));
   serv_addr.sin_family = AF_INET;
   serv_addr.sin_port = htons(portno);
   
   /* Now connect to the server */
   if (connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
      perror("ERROR connecting");
      exit(1);
   }
   
   /* Now ask for a message from the user, this message
      * will be read by server
   */
while(1)
{   
   printf("Please enter the message: ");
   bzero(buffer,256);
   fgets(buffer,255,stdin);
   /* Send message to the server */
   n = write(sockfd, buffer, strlen(buffer));
   
   if (n < 0) {
      perror("ERROR writing to socket");
      exit(1);
   }
   
   /* Now read server response */
   bzero(buffer,256);
   n = read(sockfd, buffer, 255);
    if(n==0)
    {
      perror("nothing to read");
    }
   
   if (n < 0) {
      perror("ERROR reading from socket");
      exit(1);
   }
    
   printf("%s\n",buffer);
}

--server.c

int main( int argc, char *argv[] ) {
   int sockfd, newsockfd, portno, clilen;
   char buffer[256];
   struct sockaddr_in serv_addr, cli_addr;
   int n, pid;
   
   /* First call to socket() function */
   sockfd = socket(AF_INET, SOCK_STREAM, 0);
   
   if (sockfd < 0) {
      perror("ERROR opening socket");
      exit(1);
   }
   
   /* Initialize socket structure */
   bzero((char *) &serv_addr, sizeof(serv_addr));
   portno = 5001;
   
   serv_addr.sin_family = AF_INET;
   serv_addr.sin_addr.s_addr = INADDR_ANY;
   serv_addr.sin_port = htons(portno);
   
   /* Now bind the host address using bind() call.*/
   if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
      perror("ERROR on binding");
      exit(1);
   }
   
   /* Now start listening for the clients, here
      * process will go in sleep mode and will wait
      * for the incoming connection
   */
   
   listen(sockfd,5);
   clilen = sizeof(cli_addr);
   
   while (1) {
      newsockfd = accept(sockfd, (struct sockaddr *)NULL,NULL);
        
      if (newsockfd < 0) {
         perror("ERROR on accept");
         exit(1);
      }
      
      /* Create child process */
      pid = fork();
        
      if (pid < 0) {
         perror("ERROR on fork");
         exit(1);
      }
      


 if (pid == 0) 
 {
     while(1)
     {
     /* This is the client process */
     close(sockfd);
     doprocessing(newsockfd);
   /**  exit(0); **/
     }
 }
      else {
         close(newsockfd);
      }
        
   } /* end of while */
}


void doprocessing (int sock) {
   int n;
   char buffer[256];
   bzero(buffer,256);
   n = read(sock,buffer,255);
       if(n==0)
    {
      perror("nothing to read");
    }
   
   if (n < 0) {
      perror("ERROR reading from socket");
      exit(1);
   }
   
   printf("Here is the message: %s\n",buffer);
   n = write(sock,"I got your message",18);
   
   if (n <= 0) {
      perror("ERROR writing to socket");
      exit(1);
   }
    
}

当我同时运行两者时,O / P如下:

Please enter the message: arjun
I got your message
Please enter the message: gaur
ERROR reading from socket: Connection reset by peer

请帮助。如何解决此问题

用户名

分叉的子进程正在退出而不关闭newsockfd在某些导致连接重置而不是有序关闭的平台上。

您还需要检查recv()的结果并正确处理它,即不是错误,并且还需要正确使用正返回值,例如代替

printf("%s\n",buffer);

它应该是

printf("%.*s\n",n,buffer);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

对等方重置连接:FTP期间套接字写入错误

来自分类Dev

对等方重置连接:套接字写入错误在尝试发送对象时

来自分类Dev

对等方的TCP连接重置,并且传输端点未连接

来自分类Dev

SSH问题-从套接字读取失败:对等连接重置

来自分类Dev

写入:对等方重置连接

来自分类Dev

套接字TCP连接

来自分类Dev

从应用程序重置TCP套接字连接

来自分类Dev

套接字异常:连接重置

来自分类Dev

Celery通过对等方重置连接

来自分类Dev

通过对等方重置MongoDB连接

来自分类Dev

Elasticsearch RestClient连接被对等方重置

来自分类Dev

使用sshfs由对等方重置连接

来自分类Dev

“协议握手期间发生致命错误:对等方重置连接”在 Neo4j 中

来自分类Dev

在发布带有附件的 SOAP 时,附件的大小大于 10 MB。Wildfly 10.1 上的对等方重置连接时发生套接字异常

来自分类Dev

java.net.SocketException:对等连接重置:套接字写入错误服务文件时

来自分类Dev

TensorFlow IOError:[Errno套接字错误] [Errno 104]对等重置连接

来自分类Dev

lighttpd:抛出错误“对等连接重置”,以关闭其客户端套接字

来自分类Dev

一种检测套接字对等方触发断开连接的方法

来自分类Dev

一种检测套接字对等方触发断开连接的方法

来自分类Dev

对等连接重置-Winsock

来自分类Dev

套接字连接期间IOS UI冻结

来自分类Dev

Retrofit ssl = 0x717f870208:系统调用期间发生I / O错误,对等方重置了连接

来自分类Dev

com.microsoft.sqlserver.jdbc.SQLServerException:对等连接重置:使用SQL Server 2008的grails应用中的套接字写入错误

来自分类Dev

git clone错误。从套接字读取失败:连接被对等节点重置为致命:无法从远程存储库读取

来自分类Dev

com.microsoft.sqlserver.jdbc.SQLServerException:对等连接重置:使用SQL Server 2008的grails应用中的套接字写入错误

来自分类Dev

适用于16.04 Xenial的Ubuntu AWS AMI上的SSH“从套接字读取失败:对等连接重置”

来自分类Dev

CORB作业:处理ServerConnectionException:连接被对等方重置

来自分类Dev

通过对等方重置Tooltwist控制器连接

来自分类Dev

PayPal侦听器:连接是否被对等方重置?

Related 相关文章

  1. 1

    对等方重置连接:FTP期间套接字写入错误

  2. 2

    对等方重置连接:套接字写入错误在尝试发送对象时

  3. 3

    对等方的TCP连接重置,并且传输端点未连接

  4. 4

    SSH问题-从套接字读取失败:对等连接重置

  5. 5

    写入:对等方重置连接

  6. 6

    套接字TCP连接

  7. 7

    从应用程序重置TCP套接字连接

  8. 8

    套接字异常:连接重置

  9. 9

    Celery通过对等方重置连接

  10. 10

    通过对等方重置MongoDB连接

  11. 11

    Elasticsearch RestClient连接被对等方重置

  12. 12

    使用sshfs由对等方重置连接

  13. 13

    “协议握手期间发生致命错误:对等方重置连接”在 Neo4j 中

  14. 14

    在发布带有附件的 SOAP 时,附件的大小大于 10 MB。Wildfly 10.1 上的对等方重置连接时发生套接字异常

  15. 15

    java.net.SocketException:对等连接重置:套接字写入错误服务文件时

  16. 16

    TensorFlow IOError:[Errno套接字错误] [Errno 104]对等重置连接

  17. 17

    lighttpd:抛出错误“对等连接重置”,以关闭其客户端套接字

  18. 18

    一种检测套接字对等方触发断开连接的方法

  19. 19

    一种检测套接字对等方触发断开连接的方法

  20. 20

    对等连接重置-Winsock

  21. 21

    套接字连接期间IOS UI冻结

  22. 22

    Retrofit ssl = 0x717f870208:系统调用期间发生I / O错误,对等方重置了连接

  23. 23

    com.microsoft.sqlserver.jdbc.SQLServerException:对等连接重置:使用SQL Server 2008的grails应用中的套接字写入错误

  24. 24

    git clone错误。从套接字读取失败:连接被对等节点重置为致命:无法从远程存储库读取

  25. 25

    com.microsoft.sqlserver.jdbc.SQLServerException:对等连接重置:使用SQL Server 2008的grails应用中的套接字写入错误

  26. 26

    适用于16.04 Xenial的Ubuntu AWS AMI上的SSH“从套接字读取失败:对等连接重置”

  27. 27

    CORB作业:处理ServerConnectionException:连接被对等方重置

  28. 28

    通过对等方重置Tooltwist控制器连接

  29. 29

    PayPal侦听器:连接是否被对等方重置?

热门标签

归档