我正在用C++和socket.h庫編寫套接字代碼,而我的服務器和客戶端是使用TCP協議的流套接字。 我有一個類的用戶顯示連接的客戶端。C++ socket在斷開後發送數據
class User
{
private:
int sockfd;
int n;
thread *Thread;
public:
User(int sockfd);
void Get_Message();
void Join();
~User();
};
User::User(int sockfd)
{
this->sockfd=sockfd;
Thread=new thread(&User::Get_Message,this);
}
void User::Get_Message()
{
while (1)
{
readmessage(sockfd);
}
}
void readmessage(int sock)
{
int n=0;
char buffer[256];
bzero(buffer, 256);
n = read(sock, buffer, 255);
if (n < 0)
{
error("ERROR reading from socket ");
}
cout<<"the message\t"<<buffer<<endl;
}
現在這個代碼工作,幾個客戶端可以加入我的服務器併發送消息;
然而,當這些客戶端的一個從服務器斷開連接,它使打印"the message:"
,我不知道爲什麼,以及如何阻止它... 我會很感激,如果有人可以幫助我與爲什麼和如何修理它。
你怎麼會不知道爲什麼?你有一個無限循環,'while(1)readmessage(sockfd);'當然你的代碼會繼續打印'「這條消息:」'。解決的辦法是讓'readmessage'返回一個狀態並在狀態指示連接已關閉時退出循環。 –