客户端连接但无法向服务器发送消息。[控制台聊天]

时间:2014-07-24 08:47:19

标签: java networking chat

我尝试制作一个控制台聊天服务器。我面临的主要问题是我无法将消息发送到服务器..正如您在上传的img我看到的那样,服务器和客户端已连接。但是当我在客户端输入任何东西时。客户端无响应,我必须关闭cmd提示符。 我该如何解决这个问题?my console chat

我的电脑有问题或代码错了吗?

public class MyClient 
    {
    Socket s ;

    DataInputStream din ;
    DataOutputStream dout;


    public MyClient()
    {
    try
    {
    s= new Socket("localhost",10);

    System.out.println(s);
    din = new DataInputStream(s.getInputStream());

    dout= new DataOutputStream(s.getOutputStream());

    ClientChat();

    }
    catch(Exception e)
    {
    System.err.println(e);
    }
    }

    public void ClientChat() throws IOException
    {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    //Scanner s2 = new Scanner(System.in);
    String s1;
    System.out.println("start the conversation");
    do
    {
    s1=br.readLine();
    //s1=s2.nextLine();

    dout.flush();
    System.out.println("server:"+din.readUTF());
    }
    while(!s1.equals("stop"));
    }


    public static void main (String args[])
    {
    new MyClient();
    }

    }

3 个答案:

答案 0 :(得分:2)

  1. 代码段从不调用 dout.write *(),因此不会通过套接字发送任何内容。
  2. readLine()将阻塞,直到读取一行文本,因此在客户端键入第二行文本之后才会打印发送到客户端的消息。您可以通过使用异步I / O或将读取循环移动到它自己的Thread中来解决此问题。

答案 1 :(得分:0)

dout.writeUTF(s1);内使用do loop。 writeUTF将允许您写入后续消息,直到那时它将停留在readutf函数。

java.io.DataOuputStream.writeUTF(String str)方法使用修改后的UTF-8编码将字符串写入基础输出流。 Refer to this

答案 2 :(得分:0)

您需要使服务器和客户端成为一个线程,以便它们可以独立工作。

服务器作为线程将等待客户端连接并将接收消息。

客户端作为线程将自行工作。

问题是它们无法同时运行。