【问题标题】:Client connects but cant send message to the server.[Console Chat]客户端连接但无法向服务器发送消息。[控制台聊天]
【发布时间】:2014-09-15 17:39:37
【问题描述】:

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

是我的电脑有问题还是代码有问题?

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

    }

【问题讨论】:

标签: java networking chat


【解决方案1】:

do loop 中使用dout.writeUTF(s1);。 writeUTF 将允许您在此之前写入后续消息它将卡在 readutf 函数中。

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

【讨论】:

    【解决方案2】:

    你需要让服务器和客户端成为一个线程,这样它们才能独立工作。

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

    客户端作为线程将独立工作。

    问题是它们不能同时运行。

    【讨论】:

      【解决方案3】:
      1. 代码 sn-p 从不调用 dout.write*(),因此不会通过 Socket 发送任何内容。
      2. readLine() 将阻塞直到读取一行文本,因此发送到客户端的消息在客户端键入第二行文本之前不会被打印。您可以通过使用异步 I/O 或将读取循环移动到它自己的线程来解决此问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-02
        • 2016-07-23
        • 1970-01-01
        • 1970-01-01
        • 2011-05-12
        • 1970-01-01
        • 2020-01-06
        相关资源
        最近更新 更多