2013-10-17 36 views
1

我試圖通過TCP套接字將來自我的Python服務器的複雜可變數量的數據發送到我的Android客戶端。在Python服務器和Android客戶端之間使用套接字運行

由於我發送的數據量是可變的,我必須在數據前加上消息的長度,然後在Android端,我必須先讀取該前綴,然後讀取這些數字的字節作爲流。
對嗎?

因此,這裏是我如何做它的服務器(Python)的側面:

def send_msg(sock, msg): 
    msg = struct.pack('>I', len(msg)) + msg 
    sock.sendall(msg) 

但我的Java是相當薄弱,我想不出如何獲得這個客戶端上。

任何幫助?

回答

1

沒有這麼難的傢伙,首先你要發送的數據的大小要發送爲整數/長整型值,沒有字符串。其次,在客戶端連接到服務器後,獲取(讀取)一個int/long值,指示應發送的數據量,然後等待x個字節。雖然我建議你只是發送消息作爲字符串與\r然後在客戶端讀取一行讀取數據,直到達到\r,所以這樣你就可以省略數據的大小。

在java中,你可能需要這些傢伙。

void Connect throws Exception{ 
DataInputStream dis; 
DataOutputStream dos; 
Socket s=new Socket("176.12.0.36",8903);//to connect address,port 
dis=new DataInputStream(s.getInputStream()); 
dos=new DataOutputStream(s.getOutputStream()); 
//sending anything to the server with dos 
int _sizeOfMessage=dis.readInt();//sends int value from server, no string 
byte[] _data=new byte[_sizeOfMessage]; 
dis.read(_data);//filling the buffer 
//do some business with _data 
} 
相關問題