服务器/客户端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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
