0

send / recvに問題があります。クライアントが2つの文字列を送信する場合、サーバーは1つのrecvで2つを受信し、2番目のrecvはクライアントからの3番目の送信に参加します(送信したくない)。2つの文字列を送信して2つの文字列を受信したいと思います。どのようにできるのか?

私のコード:CLIENT

char login[] = "admin";
char password[] = "admin";

send(sd, login, strlen(login), 0);
send(sd, password, strlen(password), 0);

サーバ:

bzero(login,MAX);
bzero(password,MAX);

recv(sd_client, login, sizeof(login), 0);
recv(sd_client, password, sizeof(password), 0);
4

2 に答える 2

3

TCPは文字列を送信/受信できません。TCPは、1バイトより長いメッセージを送受信できません。TCPは、1バイトより長い構造体を送信/受信できません。

TCPトランスポートはバイトストリームです。

1バイトよりも複雑なものを転送する場合は、追加のプロトコル、つまりHTTP、SMTPなどのプロトコルが必要になります。

たとえば、特にnullで終了する文字列を送信する場合は、nullが検出されるまで、受信したデータをバッファリングして連結する必要があります。そうすると、「C」スタイルの文字列が作成され、次の文字列のアセンブルに進むことができます。

Rgds、マーティン

于 2012-07-14T10:59:59.863 に答える
1

サーバー側の変数「login」と「password」に2つのchar配列を使用していると仮定します。

この場合、それらを作成するには、宣言で固定サイズを指定する必要がありました。この配列のサイズはどれくらいですか?、MAXマクロのサイズは何ですか?

クライアントで5つの長さの配列を使用している場合、MAXマクロの長さが10バイト以上の場合、最初のrecv()が両方の送信を読み取ります。

于 2012-07-14T11:12:42.207 に答える