Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我正在用java编写一个多客户端聊天服务器程序。但我不能运行它。这是我的多客户端服务器代码_Java - Fatal编程技术网

我正在用java编写一个多客户端聊天服务器程序。但我不能运行它。这是我的多客户端服务器代码

我正在用java编写一个多客户端聊天服务器程序。但我不能运行它。这是我的多客户端服务器代码,java,Java,/*代码可以运行单个客户端,但不能运行多个客户端。当我用我的客户机类运行这个程序时,它只能处理一个客户机。当我运行多个线程时,它失去了与第一个线程的通信。我不知道为什么*/ import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; i

/*代码可以运行单个客户端,但不能运行多个客户端。当我用我的客户机类运行这个程序时,它只能处理一个客户机。当我运行多个线程时,它失去了与第一个线程的通信。我不知道为什么*/

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;

import javax.swing.*;
公共类MultipleChatClient扩展JFrame{
向量客户端=新向量();
JButton btnSend=null;
JButton btnExit=null;
JTextArea taMessages=null;
JTextField tfInput=null;
BufferedReader br=null;
PrintWriter pw=null;
serversocketserver=null;
套接字=空;
int clientNumber=0;
公共多平台客户端(){
此.Interface();/*创建GUI*/
试一试{
服务器=新服务器套接字(8900);
while(true){
socket=server.accept();
HandleAClient任务=新建HandleAClient(套接字);/*将每个客户端添加到vector*/
添加(任务);
新线程(任务).start();
}
}
捕获(IOEX异常){
例如printStackTrace();
}
}
公共类handleClient实现可运行的{/*多线程类来处理多客户端*/
专用插座;
公共手持客户端(插座){
clientNumber++;
this.socket=socket;
}
公开募捐{
试一试{
br=新的BufferedReader(新的InputStreamReader(socket.getInputStream());
pw=新的PrintWriter(socket.getOutputStream(),true);
while(true){
String line=br.readLine();
taMessages.append(“客户号”+客户号+”表示:);
taMessages.append(第+行“\n”);
}
}
捕获(IOEX异常){
例如printStackTrace();
}
捕获(例外e){
taMessages.append(“连接丢失”);
}
}
公共无效发送消息(){
println(tfInput.getText());
}
}
public void Interface(){/*用于构建GUI*/
setLayout(新的BorderLayout());
btnSend=新的JButton(“发送”);
btnExit=新的JButton(“退出”);
taMessages=newjtextarea();
taMessages.setRows(10);
taMessages.setColumns(50);
taMessages.setEditable(false);
tfInput=新的JTextField(50);
JPanel but=新JPanel(新网格布局(2,1,5,10));
但是,添加(btnSend);
但是,添加(btnExit);
JScrollPane sp=新的JScrollPane(t消息,JScrollPane.垂直滚动条,根据需要,JScrollPane.水平滚动条,根据需要);
添加(sp,“Ce`在此处输入代码`enter”);
JPanel bp=newjpanel(newborderlayout());
添加(tfInput,BorderLayout.CENTER);
添加(但是,BorderLayout.EAST);
添加(bp,BorderLayout.SOUTH);
addActionListener(newButtonListner());
//addKeyListener(newButtonListner());
addActionListener(newButtonListner());
设置大小(600600);
setTitle(“服务器”);
setDefaultCloseOperation(关闭时退出);
setLocationRelativeTo(空);
setVisible(真);
//包装();
}
公共类buttonListner实现ActionListener{
@凌驾
已执行的公共无效操作(操作事件e){
如果(例如getSource()==btnExit){
系统出口(1);
}
否则{
taMessages.append(“你说:”);
taMessages.append(tfInput.getText()+“\n”);
用于(HandLeacClient c:客户端){
c、 sendMessage();
}
tfInput.setText(null);
}
}
}
公共静态void main(字符串[]args){
新的MultipleChatClient();
}
}

您必须使用
多线程
。为连接到服务器的每个客户端创建一个新线程

我已经在相同的上下文中发布了一些示例

请看下面的帖子。这可能有助于你理解它


您所说的“我无法运行它”是什么意思?请共享服务器端代码以进行分析。
public class MultipleChatClient extends JFrame{
    Vector<HandleAClient> clients = new Vector<HandleAClient>();
    JButton btnSend = null;
    JButton btnExit = null;
    JTextArea taMessages = null;
    JTextField tfInput = null;
    BufferedReader br = null;
    PrintWriter pw = null;
    ServerSocket server = null;
    Socket socket = null;
    int clientNumber = 0;
    public MultipleChatClient(){
        this.Interface();    /* creates GUI */
        try{
            server = new ServerSocket(8900);
            while(true){
                socket = server.accept();
                HandleAClient task = new HandleAClient(socket); /* add every client to vector */
                clients.add(task);
                new Thread(task).start();
            }
        }
        catch(IOException ex){
            ex.printStackTrace();
        }

    }
    public class HandleAClient implements Runnable{    /* multithreaded class to handle multiclients */
        private Socket socket;
        public HandleAClient(Socket socket){
            clientNumber++;
            this.socket = socket;
        }
        public void run(){
            try{
                br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                pw = new PrintWriter(socket.getOutputStream(), true);
                while(true){
                    String line = br.readLine();
                    taMessages.append("Client Number " + clientNumber + " said: ");
                    taMessages.append(line + "\n");
                }
            }
            catch(IOException ex){
                ex.printStackTrace();
            }
            catch(Exception e){
                taMessages.append("Connection Lost");
            }
        }
        public void sendMessage() {
            pw.println(tfInput.getText());

        }
    }
    public void Interface(){    /* to build GUI */
        setLayout(new BorderLayout());
        btnSend = new JButton("Send");
        btnExit = new JButton("Exit");
        taMessages = new JTextArea();
        taMessages.setRows(10);
        taMessages.setColumns(50);
        taMessages.setEditable(false);
        tfInput = new JTextField(50);
        JPanel but = new JPanel(new GridLayout(2,1,5,10));
        but.add(btnSend);
        but.add(btnExit);
        JScrollPane sp = new JScrollPane(taMessages, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        add(sp,"Ce`enter code here`nter");
        JPanel bp = new JPanel(new BorderLayout());
        bp.add(tfInput, BorderLayout.CENTER);
        bp.add(but, BorderLayout.EAST);
        add(bp, BorderLayout.SOUTH);
        btnSend.addActionListener(new buttonListner());
        //btnSend.addKeyListener(new buttonListner());
        btnExit.addActionListener(new buttonListner());
        setSize(600,600);
        setTitle("Server");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
        //pack();
    }
    public class buttonListner implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getSource() == btnExit){
                System.exit(1);
            }
            else{
                taMessages.append("You Said: ");
                taMessages.append(tfInput.getText() + "\n");
                for(HandleAClient c: clients){
                    c.sendMessage();
                }
                tfInput.setText(null);
            }
        }
    }

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