0

TCPサーバー(PC)-クライアント(Android)アプリケーションを作成しました。クライアントをサーバーに接続しましたが、Androidアプリケーションを再インストールすると、接続を確立できません。これを処理する方法は、Androidアプリケーションを再起動するときに、サーバーのポートに接続するためですか?サーバーはVB.netであり、Android用のクライアントJavaです。

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

    }

}
4

1 に答える 1

3

TCP は、HTTP、POP、SMTP などの非常に多くのアプリケーションで使用されているため、おそらく最も一般的に使用されているプロトコルです。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();
}

それでおしまい。これがお役に立てば幸いです。

于 2013-06-21T12:01:58.690 に答える