加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

服务器/客户端c程序出错:“连接:非套接字上的套接字操作”

发布时间:2020-12-16 10:26:36 所属栏目:百科 来源:网络整理
导读:我正在研究套接字程序,编译时一切都很好.首先,我编译并运行服务器,然后编译并运行客户端.服务器运行正常,但是当客户端启动时,我在Connect()函数中收到一条错误消息.虽然套接字似乎没问题,但客户端将无法连接,服务器也看不到连接尝试. 错误消息是: Connect:
我正在研究套接字程序,编译时一切都很好.首先,我编译并运行服务器,然后编译并运行客户端.服务器运行正常,但是当客户端启动时,我在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),'',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 socketn");
          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,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),8); 




if  ( connect (SendingSocket,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,0) == -1)

应该读

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

你写它的方式,就意味着

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

这意味着:将socket()结果与-1进行比较,给出0或1,并将其分配给SendingSocket;然后测试它是真还是假.因此,假设socket()调用成功,则SendingSocket可能为0.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读