服务器/客户端c程序出错:“连接:非套接字上的套接字操作”
发布时间:2020-12-16 10:26:36 所属栏目:百科 来源:网络整理
导读:我正在研究套接字程序,编译时一切都很好.首先,我编译并运行服务器,然后编译并运行客户端.服务器运行正常,但是当客户端启动时,我在Connect()函数中收到一条错误消息.虽然套接字似乎没问题,但客户端将无法连接,服务器也看不到连接尝试. 错误消息是: Connect:
我正在研究套接字程序,编译时一切都很好.首先,我编译并运行服务器,然后编译并运行客户端.服务器运行正常,但是当客户端启动时,我在Connect()函数中收到一条错误消息.虽然套接字似乎没问题,但客户端将无法连接,服务器也看不到连接尝试.
错误消息是:
这是服务器端代码: 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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |