我有两个程序,在服务器上,只听,客户端在说话。我以每个 64 字节的 block 发送 1 兆字节的数据。我将获得 64 字节的第一个 block ,但随后我的服务器退出,因为它无法获取其他数据。我的客户正在发送所有数据。
void ServerLinux::Receive(){
int sock = 0;
struct sockaddr_in server;
char buffer[this->packageLength];
if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
this->Die("Failed to create socket");
}
memset(&server, 0, sizeof(server));
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
server.sin_port = htons(this->port);
if(bind(sock, (struct sockaddr *) &server, sizeof(server)) < 0){
this->Die("Failed to bind the server socket");
}
if(listen(sock, 1) < 0){
this->Die("Failed to listen on server socket");
}
int clientSocket = 0;
struct sockaddr_in client;
socklen_t size = sizeof(client);
if((clientSocket = accept(sock, (struct sockaddr *) &client, &size)) < 0){
this->Die("Failed to accept client");
}
int received = -1;
//This is fine data is recived
if((received = recv(clientSocket, buffer, this->packageLength,0)) < 0){
this->Die("Failed to receive initial bytes from client");
}
std::cout << "Received!" << std::endl;
//Data is not received in this while loop
while(received > 0){
if((received = recv(sock, buffer, this->packageLength,0)) < 0){
this->Die("Failed to receive additional bytes frin client");
}
std::cout << "Received!" << std::endl;
}
}
最佳答案
为什么不对 recv 使用相同的参数?
有效:recv(clientSocket, buffer, this->packageLength,0)
不起作用 recv(sock, buffer, this->packageLength,0)
将 sock 更改为 clientSocket。
关于c++ - linux套接字只接收第一 block 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34050685/