1

私はC++プログラミングにかなり慣れていません。Linuxサーバーと通信するWindowsクライアントをコーディングしようとしています。その部分は私がうまくやった。

今、私はこれを続けるために何をすべきかわかりません。これは私がする必要があることです(しかし、方法がわかりません)。

今、私のクライアントは3つのものを要求します。例

 declared client variables 1,2,3 as string...

 Enter Anything: dgasggfds 
 //dgasggfds is now stored to cvariable1
 Enter Anything again: zxcasd
 //zxcasd is now stored to cvariable2
 Enter Anything again again: qwert
 //qwer is now stored to cvariable3

これで、クライアントはこの各変数をサーバーに送信する必要があります。サーバーはこれらの変数も使用して、そのコードを実行します。

だから今サーバー上で

 cvariable1 is now svariable1 on the server.
 cvariable2 is now svariable2 on the server.
 cvariable3 is now svariable3 on the server.

すべての変数がそこにあると、コードを実行します。

ご意見をお聞かせください。ありがとう。

- 編集 -

send()recv()を使用してみましたが、1つの変数しか送信できません。サーバー上の変数にrecvデータを設定する方法がわかりません。

- 編集 -

recvデータを変数に保存する方法を教えてください。しかし、それでも複数のデータでそれを行う方法がわかりません。

また、3つの変数は常に一緒でなければなりません。それらを分離することはできません。サーバーコードは、cmdを正しく実行するためにこれらの3つの変数/データを必要とします。

- 編集 -

これは意味がありますか?

string* packet = new string[3];
packet[0] = 'var1';
packet[1] = 'var2';
packet[2] = 'var3';

//send request
if (send(sock, packet.c_str(), packet.length(), 0) != request.length())
    die_with_wserror("send() sent a different number of bytes than expected");

しかし、それは私にいくつかのエラーを与えます。packet:expressionはクラスタイプである必要があります。

私が今やろうとしているのは、それを配列で送信し、サーバー上で一度配列を分解することです。このロジックは大丈夫ですか?

4

2 に答える 2

0

サーバーにも同じ変数があります。クライアントが最初の文字列を読み取って送信すると、サーバーはそれをクライアントの場合と同様に最初の変数に格納します。他の2つについても同様です。

次のように考えてください。クライアントがユーザーから入力を受け取るのと同じ方法で、サーバーはクライアントから入力を受け取ります。唯一の違いはcin、サーバーがrecv. 実際には、入力を処理する別のクラスに抽象化できます。次に、そのクラスの1つのインスタンスを入力に使用し、もう1つのインスタンスはcinソケットistreamから入力を取得します。しかし、この入力クラスのユーザーは、入力がどこから来たかに関係なく、同じ関数セットを使用します。

于 2012-11-24T13:23:17.983 に答える
0

クライアント側では、特殊文字を使用して 3 つの変数を連結して区切ります。

string sending = variable1 + "_" + variable2 + "_" + variable3;

送信送信

サーバー側

ssize_t bytes_recieved;
char incoming_data_buffer[1000];
bytes_recieved = recv(socketfd, incoming_data_buffer,1000, 0);

データはincoming_data_bufferにあります。"_"を使用してincoming_data_bufferを分割すると、3つの変数が得られます。

于 2012-11-24T13:50:37.967 に答える