问题描述
我已经尝试了几个小时,但是我无法弄清楚使用winsock2的简单客户端和服务器示例的问题是什么。
以下是我的以下两个文件(我尝试遵循sys/socket.h
实现中的示例并转换为winsock2.h)
:
服务器:
/////////// server.c /////////////
#include<stdio.h>
#include<winsock2.h>
int main() {
WSADATA wsa;
printf("\nInitialising Winsock...");
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
printf("Failed. Error Code : %d",WSAGetLastError());
return 1;
}
printf("Initialised.\n");
char server_message[256] = "You have reached the server!";
int server_socket;
server_socket = socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(9002);
server_address.sin_addr.s_addr = INADDR_ANY;
bind(server_socket,(struct sockaddr *) &server_address,sizeof(server_address));
printf("Listening....\n");
listen(server_socket,5);
printf("Done listening\n");
int client_socket = accept(server_socket,NULL,NULL);
printf("accepted\n");
send(client_socket,server_message,sizeof(server_message),0);
closesocket(server_socket);
return 0;
}
客户
://///////// client.c /////////////
#include<stdio.h>
#include<winsock2.h>
int main() {
WSADATA wsa;
printf("\nInitialising Winsock...");
if (WSAStartup(MAKEWORD(2,WSAGetLastError());
return 1;
}
printf("Initialised.\n");
int network_socket;
network_socket = socket(AF_INET,0);
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(9002);
server_address.sin_addr.s_addr = INADDR_ANY;
int connection_status = connect(network_socket,sizeof(server_address));
printf("Connection: %d\n",connection_status);
char server_respons[256];
recv(network_socket,server_respons,sizeof(server_respons),0);
printf("The server sent the data: %s\n",server_respons);
closesocket(network_socket);
return 0;
}
我首先启动服务器,最后得到以下终端打印输出:
Initialising Winsock...Initialised.
Listening....
Done listening
表明它已停止在接受行,但是当我运行客户端脚本时,我得到以下信息:
Initialising Winsock...Initialised.
Connection: -1
The server sent the data:
换句话说,我在connect()(-1
)遇到错误,脚本只运行了一次而没有创建任何连接?我究竟做错了什么?我尝试使用多个不同的循环尝试多次连接和接受,但似乎无济于事。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)