2012-03-24 119 views
0

我開發了一個連接到服務器的客戶端。客戶端向服務器寫入內容,服務器讀取並回應客戶端。然後客戶端讀取服務器說的內容並終止。我希望延長這一點,允許客戶端和服務器繼續說再三次,然後終止。我生成了一個for循環,在這個循環中我處理代碼在服務器和客戶端上的讀寫代碼,但是它在無限循環中結束並寫入第一次輸入的文本,而不是要求用戶輸入新數據。傳遞服務器/客戶端消息C

,在讀取/寫入處理的服務器代碼如下:

int temp = 0; 
char cha [10] = "helloworld"; 
while(temp = 3){ 

int rc; 
char ch[100]; 


rc = read(newsockfd, &ch, 100); 
    printf("Client sent: %s\n", ch) ;  

    write(newsockfd, cha + temp, 100); 

temp ++; 
} 


close(sockfd); 
close(newsockfd); 

這是客戶端代碼中的讀/寫的處理:

int temp = 0; 
char cha[10] = "abcdefhijk"; 

while(temp = 3)  
{ 
int rc; 
char ch2 [100]; 

rc = write(sockfd, cha + temp, 100); 

    read(sockfd, &ch2, 100); 
    printf("Server said: %s\n", ch2); 

temp ++; 
} 


sleep(2); 
close(sockfd); 

此外,我關閉循環完成後的文件描述符。

任何幫助非常感謝

+4

'while(temp = 3)'看起來像一個錯字。建議:使用for()循環。 – wildplasser 2012-03-24 16:12:49

回答

2

你能提供循環代碼嗎?你使用阻塞或非阻塞調用read()和write()? (也就是說,它們是否立即返回,而不管數據是否可用(非阻塞),還是阻塞直到有可用(阻塞))?

更新: 如果您發佈的代碼是實際代碼,那麼您的while循環出錯。你檢查

temp = 3 

這是永遠是真的,因爲你只是分配'3'溫度。您可能的意思是

temp < 3 

+0

我不確定讀寫是阻塞的還是非阻塞的,但從我可以說的是,在第一個循環中,服務器等待客戶端發送一些東西,因此我假設它的阻塞。 。但是,我不確定...我要更新上面的代碼,包括循環.. – cgval 2012-03-24 15:47:39

+0

歡迎來到SO!請在評論部分將所有查詢提交給提問者,而不是在答案中。 – 2012-03-24 15:55:06

+1

Pavan,我很願意這樣做,但可悲的是,我還沒有足夠的聲望能夠......評論其他人的問題顯然需要至少50的代表... – sonicwave 2012-03-24 17:15:56

相關問題