微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用winsock2.h的问题

如何解决使用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 举报,一经查实,本站将立刻删除。