使用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 (将#修改为@)