使用套接字的Java聊天程序无法正常工作

时间:2018-08-14 20:55:00

标签: java multithreading sockets connection

不确定标题是否具有误导性。我无法弥补一个更好的。

重点是- 我正在尝试为多个客户端建立一个非常简单的聊天程序,使其能够连接,并且我是主机(服务器)。

我已经到了一个客户端可以成功连接的地步,并且可以从客户端和服务器发送消息而没有任何问题。但是,如果我连接了第二个客户端,我也可以从该客户端发送消息,但是当我尝试切换回客户端编号1时,我可以发送一个消息,然后所有客户端都无法将任何消息发送到服务器。 希望您能够理解以上内容。

我正在使用两个类(Framer类创建一个视觉对象)

服务器类

package me.quova.server;

import java.net.ServerSocket;

public class Server {


    public static void main(String[] args) {

        Framer.initialize();

        try {

            ConnectionHandler.ss = new ServerSocket(5001);

            for(;;) {

                ConnectionHandler.s = ConnectionHandler.ss.accept();

                new Thread(new ConnectionHandler(ConnectionHandler.s)).start();
            }

        } catch (Exception ex) {

            ex.printStackTrace();
        }
    }
}

ConnectionHandler类

package me.quova.server;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ConnectionHandler implements Runnable {


    static Socket s;

    static ServerSocket ss;

    static DataInputStream din;

    static DataOutputStream dout;


    public ConnectionHandler(Socket sx) {

    }


    @Override
    public void run() {

        String msgin = "";

        try {

            din = new DataInputStream(s.getInputStream());

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

            Framer.textArea.append("\nServer socket created at port 5001");

            while(true) {

                msgin = din.readUTF();

                Framer.textArea.append("\n"+msgin);
            }

        } catch (Exception ex) {

            ex.printStackTrace();
        }
    }
}

编辑:我忘了显示如何发送消息,它是在Framer类中的

    public static void sendText() {

        try {

            ConnectionHandler.dout.writeUTF(Framer.text.getText());

            textArea.append("\n"+text.getText());

        } catch (Exception ex) {

            ex.printStackTrace();
        }
    } 

1 个答案:

答案 0 :(得分:0)

无论哪种方式,都感谢@MickMnemonic,我找到了一个可行的解决方案 我没有看到的另一个问题是,我试图同时使服务器成为服务器和客户端。.我最终使它成为仅服务器,在其中我完全不后悔。 当连接出现时,我删除了所有静态变量并创建了新的套接字和流。