簡體   English   中英

TCP客戶端/服務器通信只發送第一條消息?

[英]TCP Client/Server communication only sends first message?

我在java中設置一個簡單的TCP客戶端服務器交互。

服務器:

服務器是用Java編寫的桌面客戶端:

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

class TCPServer
{
    public static int PORT_NUMBER = 6129;

    public static void main(String argv[]) throws Exception
    {
        String clientMessage;
        ServerSocket welcomeSocket = new ServerSocket(PORT_NUMBER);

        while (true)
        {
            Socket connectionSocket = welcomeSocket.accept();

            BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));

            DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());

            clientMessage = inFromClient.readLine();

            System.out.println("Received: " + clientMessage);

            outToClient.writeBytes("I received this: "+ clientMessage +"\n");
        }
    }
}

客戶:

客戶端是一個Android應用程序,通過TCP連接到服務器。 在客戶端我有一個方法sendMessage(String msg) ,它嘗試向服務器發送消息。

public static void sendMessage(String msg) throws IOException
{
    if (mainSocket == null)
    {
        return;
    }
    if (!mainSocket.isConnected())
    {
        connectSocket();
    }
    PrintWriter output = new PrintWriter( mainSocket.getOutputStream());
    output.println(msg);
    output.flush();
    System.out.println(msg);
}

問題是,服務器收到第一條消息,但任何后續消息都不會顯示。 當我關閉客戶端時,所有其他消息突然出現在服務器中。

這是服務器看到的:

Received: message 1

很長一段時間都沒有活動......
然后我關閉了客戶端

Received: message 2 message 3 message 4 message 5 etc..

我在sendMessage()方法中放了一個println,並且實時調用了方法本身。

每次發送消息時,您都需要在客戶端顯式close() PrintWriter 當您完成讀取inFromClient時,在服務器端也是如此,並且當您完成寫入outToClient時再次。

另見這個基本示例 ,他們非常好地解釋了基本工作流程:

但是,基礎知識與此計划中的基本內容大致相同:

打開一個插座。

打開輸入流並將輸出流輸出到套接字。

根據服務器協議讀取和寫入流。

關閉溪流。

關閉插座。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM