【发布时间】:2016-03-27 04:13:25
【问题描述】:
我正在尝试读取服务器,直到客户端发送完成消息。这是 myVar.id==-1。我在服务器中读取无限循环,直到它从客户端读取完成标志。它读取直到它从客户端完成标志,但它没有结束它挂在那里。有什么想法吗?
//server
sockdesc = socket(AF_INET, SOCK_STREAM, 0);
if ( sockdesc < 0 )
{
cout << "Error creating socket" << endl;
exit(0);
}
else{
if ( getaddrinfo("0.0.0.0", portnum, NULL, &myinfo) != 0 )
{
cout << "Error getting address" << endl;
exit(0);
}
}
if (bind(sockdesc, myinfo->ai_addr, myinfo->ai_addrlen) < 0 ){
cout << "Error binding to socket" << endl;
exit(0);
}
if ( listen(sockdesc, 1) < 0 ){
cout << "Error in listen" << endl;
exit(0);
}
connection = accept(sockdesc, NULL, NULL);
if ( connection < 0 ){
cout << "Error in accept" << endl;
exit(0);
}
while(true){
value = read(connection, (char*)&myVar, sizeof(procd));
if (value < 0) {
perror("ERROR reading from socket");
exit(1);
}
if(myVar.id==-1){
close(connection);
exit(0);
}//if
else{
//display what received
}
}
//client
while ( getline (inputFile,line) )//read a line till EOF
{
write(sockdesc, (char*)&myVar, sizeof(procd));
}
myVar.id=-1;
write(sockdesc, (char*)&myVar, sizeof(procd));
【问题讨论】:
-
“挂在那里”到底是什么意思?
-
Srver read() 似乎处于默认字节流模式,因此似乎无法正确和完整地处理 read() 返回的结果或处理任何消息协议。结果:“myVar”不太可能包含正确框架的应用程序协议单元,“id”可能是错误的。
-
如果
read()返回零,则对等方已关闭连接。你不是在为此测试。你应该。