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
时,另一方面,服务器不会显示outputreceive
和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);