1

私はソケットプログラミングに不慣れです。複数の文字列を1つずつサーバーに送信し、結果の文字列を収集する必要があります。

ここで問題となるのは、クライアントで送信/書き込み機能を使用すると、すべての文字列がサーバーから一度に読み取られることです。

//client.c
sendString(serversocket,"str1"); 

sendString(serversocket,"str2"); 

sendString(serversocket,"str3"); 

//server.c

char *buff=readstring(clientsocket);

printf("%s",buff) ;//output : str1str2str2

取得する必要がありstr1str2そしてstr3...

次々と受け取るようにする必要があります。これどうやってするの?どんな助けでもいただければ幸いです。

4

3 に答える 3

3

TCPソケットはバイトストリームです-受信側でデータを分割する必要があります。

文字列の場合、これは、たとえば次の2つの方法のいずれかで実行できます。

クライアント:

  • 整数の長さを送信します
  • 文字列データを送信する

サーバ:

  • 整数の長さを読み取る
  • このバイト数を文字列に読み込みます

または、0-terminationを使用できます。

クライアント:

  • 文字列の後に0バイトを送信します

サーバ:

  • 可能な限り読み取り、0バイトをスキャンし、文字列を抽出します

サーバー側でこれら2つのケースの両方を処理する必要があります。

  • サーバーは、への呼び出しごとに1バイトを受け取りますrecv()
  • サーバーは、への1回の呼び出しですべてのデータを受信しますrecv()
于 2011-03-11T10:05:00.723 に答える
0

ここではTCPを使用していると思います。この場合、ソケットに送信されたものはすべてストリームとして扱われます。したがって、文字列を分割するには、ストリームにセパレータを追加する必要があります。各文字列の後に改行を送信してから、入力を解析して行を再度分割することができます。

于 2011-03-11T10:05:42.003 に答える
0

TCPはバイトストリームであるため、データ、つまり論理パケットを区切る必要があります。この場合、改行文字「\ n」が最も明白な選択である可能性があります。または、ヌル文字「\0」を使用することもできます。

//client.c
sendString(serversocket,"str1\n"); 

sendString(serversocket,"str2\n"); 

sendString(serversocket,"str3\n"); 

次に、 strtokのようなものを使用して、入力データをそのコンポーネント論理パケットに切り刻むことができます。

于 2011-03-11T10:15:33.910 に答える