Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/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++_Sockets_Tcp - Fatal编程技术网

C++ 向服务器发送数据时出错

C++ 向服务器发送数据时出错,c++,sockets,tcp,C++,Sockets,Tcp,为什么在运行程序并将数据发送到服务器时返回此错误recv失败:传输端点未连接或未显示服务器已接受,只需在客户端中显示发送数据功能的消息 server.cpp: int main() { char packet[30]; char buffer[20] = "I got your message"; int conn_sock, comm_sock, n, m; struct sockaddr_in server_addr, client_addr; if

为什么在运行程序并将数据发送到
服务器
时返回此错误
recv失败:传输端点未连接
或未显示
服务器
已接受,只需在
客户端中显示发送数据功能的消息

server.cpp:

int main() {
    char packet[30];
    char buffer[20] = "I got your message";
    int conn_sock, comm_sock, n, m;
    struct sockaddr_in server_addr, client_addr;
    if ((conn_sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
        perror("Couldn't create socket");
        exit(1);
    }
    cout << "Already create socket!!!\n" << endl;

    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(0);
    server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    memset(&server_addr, 0, sizeof(server_addr));
    if (bind(conn_sock, (struct sockaddr *) &server_addr, sizeof(server_addr))
            == -1) {
        perror("couldn't bind");
        exit(1);
    }
    if (listen(conn_sock, 10) == -1) {
        perror("couldn't listen");
        exit(1);
    }

    cout << "Listening For Connection...\r" << endl;
    socklen_t len = sizeof(server_addr);
    if (getsockname(conn_sock, (struct sockaddr *) &server_addr, &len) == -1)

        perror("getsockname");
    else
        printf("port number %d\n", ntohs(server_addr.sin_port));

    while (1) {
        memset(&client_addr, 0, sizeof(client_addr));
        if ((comm_sock = accept(conn_sock, (struct sockaddr *) &client_addr,
                (socklen_t *) &client_addr)) == -1) {
            perror("couldn't accept\n");
            continue;
        }
        cout << "accepted" << endl;
        bzero(packet, 10);
        m = recv(conn_sock, packet, 10, 0);

        if (m < 0) {
            perror("recv failed");
            exit(1);
        }
       cout<<"recieved"<<endl;
        /* Write a response to the client */
        n = send(conn_sock, buffer, sizeof(buffer), 0);

        if (n < 0) {
            perror("ERROR send to client");
            exit(1);
        }

        close(n);
        close(m);
        close(comm_sock);

    }
    close(conn_sock);
    return 0;
}
或:


在服务器的
recv
send
调用中,您需要传递从
accept
返回的套接字

所以不是

m = recv(conn_sock, packet, 10, 0);

send
调用也是如此

另外,不要在
n
m
上调用close,也就是说,删除这两行代码:

    close(n);
    close(m);
编辑:抱歉,在我进行编辑时,这可能不是您在客户端的
send_data
rec_data
中想要的:

return true;
close(sock);

感谢您解答错误,但当output
client
data send
时,另一方面,服务器不会显示output
receive
accepted
始终,有时会显示…为什么???确保服务器不会在
无法
刷新到屏幕之前终止。检查并考虑使用这些消息的无缓冲打印功能。如原问题已解决,请注明为答案,谢谢you@carstan刷新(cout)它是真的吗?你能告诉我是否为假吗…?我想我需要更多的细节,例如:服务器是否继续运行,是否退出,或者是否在任何时候终止它?客户端是否成功发送数据并接收响应?你看到了什么打印输出与实施的修复?当我运行程序时,我看到刚刚创建套接字<代码>正在侦听连接。。。端口号53497已接受接收发送...或
套接字已创建连接数据发送接收您的消息
在两种情况下程序保持运行,是服务器保持运行,是客户端已成功发送数据并接收
m = recv(conn_sock, packet, 10, 0);
m = recv(comm_sock, packet, 10, 0);
    close(n);
    close(m);
return true;
close(sock);