TCP サーバー/クライアント チャットを実装して、新しいクライアントのユーザー名がまだ存在しないことを確認したかったのです。サーバーのコード部分は次のとおりです。
do
{
err=0;
if(write(socketFd[(int)idx], nickMsg, strlen(nickMsg))<0)
perror("write");
memset(buff, 0, sizeof(buff));
read(socketFd[(int)idx], buff, sizeof(buff));
for(i=0; i<supportedUsrsNum; i++)
{
if(*names[i]!=0)
{
if(strncmp(buff, names[i], strlen(buff))==0)
{
err=-1;
write(socketFd[(int)idx], usrExstMsg, strlen(usrExstMsg));
break;
}
}
}
if(!err)
break;
}
while(err==-1);
クライアントは次のように書いています。
do
{
gets(sendBuff);
write(sockFd, &sendBuff, sizeof(sendBuff));
sleep(1);
}while(1);
2 番目のクライアントが既存の名前を試行すると、サーバーはそれを検出し、2 回目の繰り返しに進みます。この繰り返しでは、read() が ASCII 値 3 を取得しますが、クライアント側でそれ以上の入力は発生しません。クライアントから新しい値を再読み取りするにはどうすればよいですか?