我有在C.在while循環滯留在客戶端
問題的客戶端服務器編程的一個問題是代碼卡在客戶代碼while循環。該代碼是@客戶:
while ((n_read=((read(sockfd,&buffer,sizeof(buffer))))>0)
{
buffer[n_read]='\0';
write(fd,buffer,strlen(buffer));
printf("------- the value of n_read is : %d\n",n_read) ;
}
所以,當我調試使用在客戶端上使用strace這個代碼在這裏是系統調用的快照。我看到從服務器讀取整個文件後n_read的值是1,但是讀取= 0後服務器正常退出讀取? 我怎樣才能解決這個問題
的客戶端代碼卡:
read(3, "._guardAgainstUnicode(pad)\n# Pad"..., 1025) = 1025
write(4, ".", 1) = 1
write(1, "------- the value of n_read is :"..., 35------- the value of n_read is : 1
) = 35
read(3, "crypted\nwith the already specifi"..., 1025) = 1025
write(4, "c", 1) = 1
write(1, "------- the value of n_read is :"..., 35------- the value of n_read is : 1
) = 35
read(3, " = bytes.fromhex('').join(result"..., 1025) = 1025
write(4, " ", 1) = 1
write(1, "------- the value of n_read is :"..., 35------- the value of n_read is : 1
) = 35
我認爲你在'while'聲明中錯過了關閉')'但是很難計數,因爲有那麼多。 – Bucket
當服務器沒有關閉TCP連接時,會發生什麼。因此,請驗證服務器是否關閉連接。當連接關閉時,read()將返回<= 0,並且循環將結束。 – nos
是的,你有6個'('和5''')的條件。 – ChiefTwoPencils