Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;:客户端连接不需要服务器 我正在尝试做一个C++服务器客户端通信程序。目前,服务器和客户端都在本地主机上_C++_Sockets_Networking - Fatal编程技术网

C++;:客户端连接不需要服务器 我正在尝试做一个C++服务器客户端通信程序。目前,服务器和客户端都在本地主机上

C++;:客户端连接不需要服务器 我正在尝试做一个C++服务器客户端通信程序。目前,服务器和客户端都在本地主机上,c++,sockets,networking,C++,Sockets,Networking,当我运行server.cpp时,它会按预期在“侦听…”处等待,直到我不运行client.cpp时才会继续。当客户端运行时,服务器打印“已连接”,并且服务器端和客户端都已连接 但当我只运行client.cpp时,它会在一秒钟后打印“Connecting…”,然后打印“Connected”,即使server.cpp没有运行,并且指定的端口没有打开 我已经对这两个代码进行了三次检查,多次尝试,在只运行客户端之前也检查了打开的端口,多次更改端口,但都不起作用。为什么即使服务器未运行,客户端也会说“已连接

当我运行server.cpp时,它会按预期在“侦听…”处等待,直到我不运行client.cpp时才会继续。当客户端运行时,服务器打印“已连接”,并且服务器端和客户端都已连接

但当我只运行client.cpp时,它会在一秒钟后打印“Connecting…”,然后打印“Connected”,即使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;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#定义端口11056
int main(int argc,字符**argv){
int sock=套接字(AF_INET、sock流、PF_unsec);
如果(sock==-1){
printf(“E)套接字创建\n”);
返回1;
}
服务器、客户端中的结构sockaddr_;
server.sin\u addr.s\u addr=INADDR\u ANY;
server.sin_port=端口;
server.sinu family=AF\u INET;
int binded=bind(sock,(struct sockaddr*)&server,sizeof(server));
如果(绑定==-1){
printf(“E)绑定\n”);
返回1;
}
printf(“4)监听…\n”);
听(短袜,5);
int new_sock=accept(sock,(struct sockaddr*)和client,(socklen_t*)sizeof(client));
printf(“5)已连接\n”);
停机(sock、SHUT\RDWR);
关闭(新袜子);
关闭(袜子);
printf(“退出”);
返回0;
}
客户端.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;
}
#包括
#包括
#包括
#包括
#包括
#定义端口11056
intmain(intargc,字符**argv){
int sock=套接字(AF_INET、sock流、PF_unsec);
如果(sock==-1){
printf(“创建套接字时出错\n”);
返回1;
}
客户端中的结构sockaddr_;
client.sin_port=端口;
client.sinu family=AF\u INET;
client.sin_addr.s_addr=inet_addr(“127.0.0.1”);
printf(“3)连接…\n”);
连接(sock,(struct sockaddr*)和客户端,sizeof(客户端));
printf(“4)已连接\n”);
关闭(袜子);
printf(“退出”);
返回0;
}

插座可以连接到自身。端口11056是一个可以在创建客户端套接字并尝试连接到自己的套接字时分配给它的端口。你可以在tcp客户端上进行google自连接并获得更多结果。如果我将服务器和客户端设置在不同的机器上,代码是否工作正常?是的,或者如果它们位于同一台机器上,请确保在启动客户端之前先启动服务器。客户端是否真的在连接?检查返回值,以了解它是否真的在连接thought@dlmeetei我太激动了,我看到了我认为和一周前花了一段时间做的事情是一样的问题,我甚至没有看到他没有连接在一个循环中。。。抢手货不过,在正确的情况下,TCP客户端套接字可以与自身进行完全握手。。这仍然让我有点困惑。