C ++:客户端连接时没有服务器

时间:2017-07-07 05:09:19

标签: c++ sockets networking

我正在尝试制作C ++服务器 - 客户端通信程序。目前,服务器和客户端都在localhost上。

当我运行server.cpp时,它按照预期等待"正在倾听..."并且在我不运行client.cpp之前不再继续。当客户端运行时,服务器打印"已连接"服务器和客户端都结束了。

但是当我只运行client.cpp 时,它会打印"正在连接......"然后"已连接"一秒钟之后,即使server.cpp没有运行,指定的端口也没有打开。

我已经对这两个代码进行了三次检查,尝试了多次,还检查了打开端口,然后再运行 客户端,多次更改端口,但没有任何效果。为什么客户说"已连接"即使服务器没有运行?

server.cpp:

#include <cstdio>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <arpa/inet.h>

#define PORT 11056

int main(int argc, char** argv) {
    int sock = socket(AF_INET, SOCK_STREAM, PF_UNSPEC);
    if (sock == -1) {
        printf("E) Socket creation\n");
        return 1;
    }

    struct sockaddr_in server, client;
    server.sin_addr.s_addr = INADDR_ANY;
    server.sin_port = PORT;
    server.sin_family = AF_INET;

    int binded = bind(sock, (struct sockaddr *)&server, sizeof(server));
    if (binded == -1) {
        printf("E) Binding\n");
        return 1;
    }

    printf("4) Listening...\n");
    listen(sock, 5);

    int new_sock = accept(sock, (struct sockaddr *)&client, (socklen_t *)sizeof(client));
    printf("5) Connected\n");

    shutdown(sock, SHUT_RDWR);
    close(new_sock);
    close(sock);

    printf("EXIT\n");

    return 0;
}

client.cpp

#include <cstdio>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>

#define PORT 11056

int main(int argc, char** argv) {  
    int sock = socket(AF_INET, SOCK_STREAM, PF_UNSPEC);
    if(sock == -1) {
        printf("Error creating socket\n");
        return 1;
    }

    struct sockaddr_in client;
    client.sin_port = PORT;
    client.sin_family = AF_INET;
    client.sin_addr.s_addr = inet_addr("127.0.0.1");

    printf("3) Connecting...\n");
    connect(sock, (struct sockaddr *)&client, sizeof(client));
    printf("4) Connected\n");

    close(sock);

    printf("EXIT");
    return 0;
}

0 个答案:

没有答案