TCP客户端/服务器通信只发送第一条消息?

时间:2011-08-22 21:53:50

标签: java android tcp

我在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");
        }
    }
}

客户端:

客户端是一个用TCP连接到服务器的Android应用程序。在客户端,我有一个方法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,并且实时调用了方法本身。

1 个答案:

答案 0 :(得分:6)

每次发送邮件时,您都需要在客户端明确close() PrintWriter。完成阅读inFromClient后,服务器端也相同,写完outToClient时再次相同。

另见basic example,他们很好地解释了基本的工作流程:

  

但是,基本知识与此计划中的基本内容大致相同:

     

打开一个插座。

     

打开输入流并将输出流输出到套接字。

     

根据服务器协议读取和写入流。

     

关闭溪流。

     

关闭套接字。