如何解决使用winsock2.h的问题
我已经尝试了几个小时,但是我无法弄清楚使用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 举报,一经查实,本站将立刻删除。