c - 写套接字导致 C 中的 "program exited with code 141"

标签 c sockets

我正在尝试在 C 中设置客户端/服务器。我建立了连接,然后我想向服务器发送用户名和密码,服务器必须回复确认他已收到 usr/pwd .问题是server和client一遇到“write”或“read”函数就退出了。我该怎么办?

服务器.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <netdb.h>
#include <signal.h>

void main(){
   int ds_sock;
   struct sockaddr_in my_addr;
   ds_sock=socket(AF_INET,SOCK_STREAM,0);

   memset(&my_addr,0,sizeof(my_addr));
   my_addr.sin_family=AF_INET;
   my_addr.sin_port=htons(25000);
   my_addr.sin_addr.s_addr=INADDR_ANY;

   if(bind(ds_sock,(struct sockaddr *)&my_addr,sizeof(my_addr))<0){
       printf("error in bind");
   }

   listen(ds_sock,2);
   int ds_sock_acc;
   struct sockaddr_in addr;
   size_t sin_size = sizeof(struct sockaddr_in);
   signal(SIGCHLD,SIG_IGN);
   while(1){
       if((ds_sock_acc=accept(ds_sock,(struct sockaddr *)&addr,&sin_size))<1){
           printf("error accept");
       }
    printf("connected");
    char usr[10];
    read(ds_sock,usr,10);
    char* confirm_usr;
    confirm_usr="Username received";
    write(ds_sock,confirm_usr,100);

    char pwd[10];
    read(ds_sock,pwd,10);
    char* confirm_pwd;
    confirm_pwd="Password received";
    write(ds_sock,confirm_pwd,100);
   }    
}

客户端.c:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <netdb.h>

void main(){
    int ds_sock;
    ds_sock = socket(AF_INET, SOCK_STREAM,0);

    int ret;
    struct sockaddr_in Eaddr;
    Eaddr.sin_family = AF_INET;
    Eaddr.sin_port = htons(25000);
    Eaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
    ret = connect(ds_sock,(struct sockaddr *)&Eaddr,sizeof(Eaddr));
    if(ret==-1){ 
        printf("error connect");
        exit(EXIT_FAILURE);
    }
    printf("connect OK");

    char usr[10];
    printf("Insert username");
    scanf("%s",usr);

    char pwd[12];
    printf("Insert password");
    scanf("%s",pwd);
    printf("%s",pwd);

    write(ds_sock,usr,10);  
    char usr_reply[100];
    read(ds_sock,usr_reply,100);
    printf("%s",usr_reply);

    write(ds_sock,pwd,12);
    char pwd_reply[100];
    read(ds_sock,pwd_reply,100);
    printf("%s",pwd_reply);
}

最佳答案

虽然第一个答案非常完整,但我想添加 141 错误是 SIGPIPE 错误。 (在linux手册中检查这个) 您可以跟踪您的程序以查找错误代码或实现 errno 和 perror。

关于c - 写套接字导致 C 中的 "program exited with code 141",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26259807/

相关文章:

c# - 我应该如何处理 .NET 中的套接字断开连接?

Cython:将指针传递给函数中的指针,采用 void **

c++ - C11/C++11 弱内存基准测试

c# - 如何在 C# 中进行非阻塞套接字调用以确定连接状态?

php - PHP 脚本可以检测套接字是否已关闭吗?

java - 通过套接字传输文件时出现 EOFException 或 SocketException : Socket is closed,

Python sendto() 未执行

c - 使用c检索linux中的分区信息

html - 使用 C 的 HTTP 响应中的图像?

c - 为什么人们有时会声明数组大小?