2012-11-22 3 views
2

저는 초보자입니다. 그래서 멍청한 질문을하면 미안 해요.
서버와 소켓 연결을해야합니다.
클라이언트 (안드로이드 장치)는 서버에 메시지를 보내고 확인 메시지를 기다려야합니다. 그런 다음 서버가 30 초 동안 클라이언트에서 아무 것도받지 못하면 ack 메시지에 대한 요청을 전송합니다.
내가 해낸 첫 번째 부분은 클라이언트가 메시지를 보내고 응답을 읽는 것입니다.
내가 묻는 것은 : 클라이언트가 서버로부터 가능한 메시지를 기다리는 방법은 무엇입니까?
에서 onCreate 방법에있어서 :
이 내가 쓴 코드입니다클라이언트가 가능한 서버 메시지를 기다리는 방법은 무엇입니까?

Thread myThread = new Thread(new myRunnable()); 
myThread.start(); 

는 그리고이 myRunnable입니다 :

public class myRunnable implements Runnable{ 
    public void run(){ 
    try{ 
     Socket socket = new Socket(serverIp, serverPort); 
     InputStream is = socket.getInputStream(); 
     OutputStream out = socket.getOutputStream(); 
     out.write(byteBuffer.array()); 
     out.flush(); 
     byte[] bbb = new byte[1024]; 
     // Receive message from server 
     int bytesToRead= is.read(bbb); 
     is.close(); 
     out.close(); 
     socket.close(); 

Successives 조작 -1을 돌려 읽고, 그래서 나는 기다리고 어떻게 머물 수 서버 메시지?
조언 해 주셔서 감사합니다.

+0

제목에 태그를 넣지 마십시오. http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles –

답변

2

스트림을 닫지 마십시오. 스트림을 닫으면 서버와의 통신이 닫힙니다. 보통 서버 통신은 무한 루프에서 발생합니다. 이런 식으로 뭔가 :이 메시지를 당신이 원하는 및 다음 메시지를 읽기에 돌아 왔을 어떤 방법을 처리 한 후 서버가 어떤 메시지를 보낼 때까지

public class myRunnable implements Runnable{ 
    public void run(){ 
    try{ 
     Socket socket = new Socket(serverIp, serverPort); 
     InputStream is = socket.getInputStream(); 
     OutputStream out = socket.getOutputStream(); 
     out.write(byteBuffer.array()); 
     out.flush(); 
     byte[] bbb = new byte[1024]; 
     while (true) { 
     // Read next message. 
     bytesToRead = is.read(bbb); 
     // handle message... 
     // If you need to stop communication use 'break' to exit loop; 
     } 
     is.close(); 
     out.close(); 
     socket.close(); 

그래서 스레드 라인 bytesToRead = is.read(bbb)에 멈 춥니 다. break을 사용하여 통신 종료 루프를 중지해야하는 경우.

+0

답변 해 주셔서 감사합니다! 나는 당신이 말했듯이 노력했지만 나는 첫 번째 메시지 이상을받지 못하고 "bytesToRead"는 항상 = -1입니다. 나는이 답변을 읽었다 : [link] (http://stackoverflow.com/a/611777/1696856)는 "-1의 의미는 아닙니다."이 시도에 대한 데이터가 없다는 것을 의미합니다. 스트림이 닫히고 아무런 데이터도 존재하지 않으므로 묻지 않습니다. "무엇을해야할지 모르겠습니다. 감사합니다. – jane1012

+0

서버가 연결을 닫지 않았습니까? –

+0

메소드를 사용하여?를 알 수 있습니까? isConnected()? – jane1012

관련 문제