2013-10-17 6 views
1

파이썬 서버에서 TCP 소켓을 통해 안드로이드 클라이언트로 복잡한 가변 양의 데이터를 보내려고합니다.파이썬 서버와 안드로이드 클라이언트 사이의 소켓으로 작동

가변 양의 데이터를 보내고 있으므로 메시지 길이에 데이터 접두어를 붙여야합니다. 그런 다음 Android 측에서 먼저 해당 접두사를 읽은 다음 해당 번호를 읽어야합니다. 바이트 수를 스트림으로 나타냅니다.
맞습니까?

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

을하지만 내 자바는 매우 약하고 나는 클라이언트 측에서이를받는 방법을 알아낼 수 없습니다 : 그래서 여기

내가 서버 (파이썬) 측에하고 있어요 방법입니다.

어떤 도움이 필요합니까?

답변

1

처음에는 전송하려는 데이터의 크기를 정수/긴 값, 즉 String으로 보내야합니다. 둘째, 클라이언트 측에서 서버에 연결 한 직후에 데이터 양을 나타내는 하나의 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 
} 
관련 문제