2013-03-03 2 views
0

나는 TCP 서버 (PC) - 클라이언트 (안드로이드) 애플리케이션을 만들었습니다. 서버에 클라이언트를 연결했지만 내 안드로이드 응용 프로그램을 다시 시작할 때 연결을 설정할 수 없습니다. 이것을 어떻게 처리 할 것인가? 안드로이드 응용 프로그램을 다시 시작하면 서버의 포트에 연결됩니까? ,이 등 HTTP, POP, SMTP, 같은 많은 응용 프로그램에 사용됩니다 간단하기 때문에 TCP는 프로토콜은 가장 일반적으로 사용되는 프로토콜 서버 VB.net와 안드로이드안드로이드 TCP 서버 클라이언트

Sub Main() 
    Dim serverSocket As New TcpListener(8888) 
    Dim requestCount As Integer 
    Dim clientSocket As TcpClient 
    serverSocket.Start() 
    msg("Server Started") 
    clientSocket = serverSocket.AcceptTcpClient() 
    msg("Accept connection from client") 
    requestCount = 0 
    Dim flag As Boolean = True 

    While (flag = True) 
     Try 
      requestCount = requestCount + 1 
      Dim networkStream As NetworkStream = _ 
        clientSocket.GetStream() 
      Dim bytesFrom(10024) As Byte 
      networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize)) 
      Dim dataFromClient As String = _ 
        System.Text.Encoding.ASCII.GetString(bytesFrom) 
      msg("Data from client - " + dataFromClient) 
      Dim serverResponse As String = _ 
       "Server response " + Convert.ToString(requestCount) 
      Dim sendBytes As [Byte]() = _ 
       Encoding.ASCII.GetBytes(serverResponse) 
      networkStream.Write(sendBytes, 0, sendBytes.Length) 
      networkStream.Flush() 
      msg(serverResponse) 
     Catch ex As Exception 
      MsgBox(ex.ToString) 
     End Try 
    End While 

    clientSocket.Close() 
    serverSocket.Stop() 
    msg("exit") 
    Console.ReadLine() 
End Sub 

Sub msg(ByVal mesg As String) 
    mesg.Trim() 
    Console.WriteLine(" >> " + mesg) 
End Sub 

public class connectTask extends AsyncTask<String, String, TCPClient> { 

    @Override 
    protected TCPClient doInBackground(String... message) { 

     // we create a TCPClient object and 
     mTcpClient = new TCPClient(new TCPClient.OnMessageReceived() { 
      @Override 
      // here the messageReceived method is implemented 
      public void messageReceived(String message) { 
       // this method calls the onProgressUpdate 
       publishProgress(message); 
      } 
     }); 
     mTcpClient.run(); 
     return null; 
    } 

public class TCPClient { 
private String serverMessage; 
public static final String SERVERIP = "192.168.1.65"; //your computer IP address 
public static final int SERVERPORT = 4444; 
private OnMessageReceived mMessageListener = null; 
private boolean mRun = false; 

PrintWriter out; 
BufferedReader in; 

/** 
* Constructor of the class. OnMessagedReceived listens for the messages received from server 
*/ 
public TCPClient(OnMessageReceived listener) { 
    mMessageListener = listener; 
} 

/** 
* Sends the message entered by client to the server 
* @param message text entered by client 
*/ 
public void sendMessage(String message){ 
    if (out != null && !out.checkError()) { 
     out.println(message); 
     out.flush(); 
    } 
} 

public void stopClient(){ 
    mRun = false; 
} 

public void run() { 

    mRun = true; 

    try { 
     //here you must put your computer's IP address. 
     InetAddress serverAddr = InetAddress.getByName(SERVERIP); 

     Log.e("TCP Client", "C: Connecting..."); 

     //create a socket to make the connection with the server 
     Socket socket = new Socket(serverAddr, SERVERPORT); 

     try { 

      //send the message to the server 
      out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); 

      Log.e("TCP Client", "C: Sent."); 

      //receive the message which the server sends back 
      in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

      //in this while the client listens for the messages sent by the server 
      while (mRun) { 
       serverMessage = in.readLine(); 

       if (serverMessage != null && mMessageListener != null) { 
        //call the method messageReceived from MyActivity class 
        mMessageListener.messageReceived(serverMessage); 
       } 
       serverMessage = null; 

      } 


      Log.e("RESPONSE FROM SERVER", "S: Received Message: '" + serverMessage + "'"); 


     } catch (Exception e) { 

      Log.e("TCP", "S: Error", e); 

     } finally { 
      //the socket must be closed. It is not possible to reconnect to this socket 
      // after it is closed, which means a new socket instance has to be created. 
      socket.close(); 
      Log.e("Socket","Closed"); 
     } 

    } catch (Exception e) { 

     Log.e("TCP", "C: Error", e); 

    } 

} 
+1

일부 코드는 물론 오류를 게시하십시오. – conor

답변

3

TCP에 대한 클라이언트 자바입니다 아마 수신자가 송신자가 보낸 것을 정확히 수신 할 것을 보장합니다. 오류가 없으며 올바른 순서로 모든 것이 올바르게 작동합니다.

try { 
     Socket s = new Socket("http://helloandroid.com&quot",80); 
} catch (UnknownHostException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
} catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
} 

이것은 간단한 클라이언트 측 TCP 요청입니다. 연결이 성공적으로 구축되면 통신에 필요한 절차를 얻을 수 있습니다.

이제 서버 측의 예를 보자 :

try { 
    Boolean end = false; 
    ServerSocket ss = new ServerSocket(12345); 
    while(!end){ 
      //Server is waiting for client here, if needed 
      Socket s = ss.accept(); 
      BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream())); 
      PrintWriter output = new PrintWriter(s.getOutputStream(),true); //Autoflush 
      String st = input.readLine(); 
      Log.d("Tcp Example", "From client: "+st); 
      output.println("Good bye and thanks for all the fish :)"); 
      s.close(); 
      if (STOPPING conditions){ end = true; } 
    } 
ss.close(); 


} catch (UnknownHostException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

마지막으로 클라이언트 측을 참조하십시오 그것 뿐이다

try { 
    Socket s = new Socket("localhost",12345); 

    //outgoing stream redirect to socket 
    OutputStream out = s.getOutputStream(); 

    PrintWriter output = new PrintWriter(out); 
    output.println("Hello Android!"); 
    BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream())); 

    //read line(s) 
    String st = input.readLine(); 
    . . . 
    //Close connection 
    s.close(); 


} catch (UnknownHostException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

합니다. 희망이 도움이 될 것입니다.