2012-03-24 14 views
0

私はサーバーに接続するクライアントを開発しました。クライアントは何かをサーバーに書き込み、サーバーはクライアントを読み取り、応答します。次に、クライアントはサーバーが何を言ったかを読み取り、両方とも終了します。これを拡張して、クライアントとサーバーが3回以上話し続けてから終了することを許可します。私は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

答えて

2

を高く評価していますか?そして、あなたはread()とwrite()の呼び出しをブロッキングまたはノンブロッキングで使っていますか? (つまり、データが利用可能(非ブロック)であるかどうかとは無関係にすぐに返されるのか、何かが利用可能になるまでブロックされます(ブロッキング)か?

更新: 投稿したコードが実際のコードの場合は、whileループに問題があります。あなたは、あなただけの一時に「3」割り当てているとして、常に真である

temp = 3 

を確認してください。おそらく

temp < 3 

+0

読み取りと書き込みがブロッキングかノンブロッキングかどうかはわかりませんが、最初のループではサーバーがクライアントに何かを送信するのを待っているので、そのブロックを仮定しています。しかし、もう一度、私は確信していません...私はループを含む上記のコードに更新するつもりです。 – cgval

+0

ようこそ!あなたのすべての質問を、回答ではなく、コメントセクションのQuestionerに入れてください。 –

+1

パヴァン、私はそれをしたいと思っていますが、残念ながら私はまだ十分な評判を得ることができません...他の人々の質問に明らかに少なくとも50の担当者が必要です... – sonicwave