c - 服务器/客户端 c 程序错误 : "Connect: socket operation on non-socket"

标签 c sockets

我正在开发一个套接字程序,编译时一切似乎都很好。首先,我编译并运行服务器,然后编译并运行客户端。服务器将运行良好,但当客户端启动时,我在 Connect() 函数中收到一条错误消息。虽然套接字看起来没问题,但客户端不会连接,服务器也看不到连接尝试。

错误信息是:

Connect: Socket operation on non-socket

服务器端代码如下:

if ((ListeningSocket = socket(AF_INET, SOCK_STREAM,0 )) == -1){
        printf("socket failed!\n");
        exit(1);
    }

     else
          printf("Server: socket() is OK!\n");


     ServerAddr.sin_family = AF_INET;
     ServerAddr.sin_port = htons(5000);
     ServerAddr.sin_addr.s_addr = INADDR_ANY; // any one for any network can connect
     memset(&(ServerAddr.sin_zero), '\0', 8); //


     if (bind (ListeningSocket, (struct sockaddr *)&ServerAddr, sizeof(struct sockaddr))==-1)
     {
          printf("Server: bind() failed!\n");
          exit (1);
     }
     else
          printf("Server: bind() is OK!\n");

     if (listen(ListeningSocket,5)== -1){
          printf("Server: Error listening on socket\n");
          exit (1);
     }
     else{
     printf("Server: listen() is OK, I'm waiting for connections...\n");
     printf("Server: accept() is ready...\n");}



         sin_size = sizeof(struct sockaddr_in);
     NewConnection = accept(ListeningSocket, (struct sockaddr *)&ClientAddr,(socklen_t *)&sin_size);
         printf("Server: accept() is OK...\n");
         printf("Server: Client connected, ready for receiving and sending data...\n");

.........
....

 //}

这是客户端代码:

if(SendingSocket = socket(AF_INET, SOCK_STREAM, 0) == -1)
     {
          printf("Client: socket() failed!");
          exit (1);
     }
     else
          printf("Client: socket() is OK!\n");


     ClientAddr.sin_family = AF_INET;
     ClientAddr.sin_port = htons(5000);  
     ClientAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
     memset(&(ClientAddr.sin_zero), '\0', 8); 




if  ( connect (SendingSocket, (struct sockaddr *)&ClientAddr,
                    sizeof(struct sockaddr)) == -1) 
        {
            perror("Connect");
            exit(1);
        }


     else
     {
          printf("Client: connect() is OK, got connected...\n");
          printf("Client: Ready for sending and/or receiving data...\n");
     }

....

最佳答案

您缺少一个括号。代码

if(SendingSocket = socket(AF_INET, SOCK_STREAM, 0) == -1)

应该阅读

if((SendingSocket = socket(AF_INET, SOCK_STREAM, 0)) == -1)

按照你写的方式,意思是

if(SendingSocket = (socket(AF_INET, SOCK_STREAM, 0) == -1))

意思是:将socket()结果与-1进行比较,给出0或1,并将其分配给SendingSocket;然后测试它是真还是假。所以 SendingSocket 可能为 0,假设 socket() 调用成功。

关于c - 服务器/客户端 c 程序错误 : "Connect: socket operation on non-socket",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1391106/

相关文章:

c - 为什么在 BSS 和数据段中将不同大小的内存分配给整数?

c++ - Win32 C API : Alternative to broken execl*() family of functions?

c - 如何修复以下警告 : format not a string literal and no format arguments?

java - 为什么 java SSLSocketImpl 创建一个虚拟套接字?

c - 在 TCP 套接字连接期间,连接被对等方重置?

java - 在某些Android设备上严重UDP数据包丢失

c - 我正在使用 4 个 for 循环,2 个工作正常,其余 2 个显示问题 3,4 个循环显示无效答案

计算 C 中的空格和其他数字

python - 在用户按下回车键之前获取 STDIN

c - 客户端和服务器想同时通话时是否需要多线程?