2012-11-24 42 views
1

我對C++編程相當陌生。我正在嘗試編寫一個與Linux服務器通信的Windows客戶端。那部分我已經成功完成了。C++ win客戶端發送linux服務器變量

現在我不知道該怎麼做才能繼續。 這是我需要做的(但不知道如何)。

現在我的客戶要求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個變量必須始終在一起。他們不能分開。 服務器代碼需要這3個變量/數據才能正確執行cmds。

- 編輯 -

這是否有意義?

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"); 

雖然它給了我一些錯誤。數據包:表達式必須具有類類型。

我現在要做的是將它發送到一個數組中,並在服務器上分解一次數組,這是邏輯好嗎?

回答

0

在客戶端使用特殊字符連接三個變量以將它們分開,例如,

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個變量。

+0

這是一個好主意。 :)我會努力工作:) – user1553142

0

你在服務器上也有相同的變量。當客戶端讀取併發送第一個字符串時,服務器將其存儲在第一個變量中,就像在客戶端上一樣。其他兩個等等。

可以這樣想:服務器從客戶端接收輸入,這與客戶端從用戶接收輸入的方式相同。唯一的區別是客戶使用例如cin而服務器使用recv。它實際上可以抽象爲一個單獨的類來處理輸入,然後使用該類的一個實例作爲cin(或者更確切地說istream)輸入,而另一個實例從套接字獲取其輸入。但是這個輸入類的用戶使用相同的一組函數,而不管輸入來自何處。

+0

我有點得到它,但服務器代碼有點讓我困惑,因爲這將是我在Linux上的第一個C++。服務器也需要全部3個變量,然後執行代碼。並且來自客戶端的所有變量都將立即發送,而不像用戶輸入1 - >發送,用戶輸入2 - >發送。但是像這樣,用戶輸入1,輸入2,輸入3 - >發送。服務器將接收3並將它們中的每一個都放入一個變量並執行代碼。有任何想法嗎? – user1553142

+0

@ user1553142使用分隔符(如換行符)發送變量,並在接收端將此收到的字符串拆分爲此分隔符。 –

相關問題