java实现简易的局域网对话系统

先说一下

  1. 写的确实比较一般,别喷
  2. 为什么呢,疫情原因,学校提前两周期末考试,时间也不太充足,将就一下

服务器代码:

package xcvcvcx;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

public class Server {
  static int index = 0;
  static BufferedWriter[] userWrite = new BufferedWriter[100];
  static BufferedReader[] userRead = new BufferedReader[100];
  static Socket[] userSocket = new Socket[100];
  static String[] userId = new String[100];
  static String[] userName = new String[100];

  public static void main(String[] args) throws IOException {
    ServerSocket ss = new ServerSocket(6666); // 监听指定端口
    System.out.println("server is running...");
    index = 0;
    for (;;) {
      Socket sock = ss.accept();
      String idd = sock.getRemoteSocketAddress().toString();
      System.out.println("connected from " + sock.getRemoteSocketAddress());
      userSocket[index] = sock;

      Thread t = new Handler(sock);
      ((Handler) t).userId = idd;
      userId[index]=((Handler) t).userId =idd;
      t.start();
    }
  }
}

class Handler extends Thread {
  Socket sock;
  BufferedWriter writer;
  BufferedReader reader;
  String username;
  String userId;

  public Handler(Socket sock) {
    this.sock = sock;
  }

  public void synMessage(Map<string,string> message) throws IOException {
    BufferedWriter writer;
    BufferedWriter[] user =Server.userWrite;
    int isall =1;
    String dis = "a";
    if ( message.get("messageclass").toString().equals("normally")  ){
      dis = message.get("distination");
      System.out.println(dis);
      System.out.println();
      if (dis.equals("all") == false){
        System.out.println("no isall");
        isall= 0;
      }
    }
    int len = Server.index;
    for(int i =0; i< len;i++)
    {
      if (Server.userWrite[i] == null){
        continue;
      }
      System.out.println("vf");
      if (isall == 0){
        // &#x4E13;&#x95E8;&#x7684;&#x6D88;&#x606F;
        if (Server.userName[i].equals(dis)){
          message.put( "distinationId",Server.userId[i] );
          writer = user[i];
          writer.write(message.toString() + "\n");
          System.out.print("&#x4E13;&#x95E8;&#x6D88;&#x606F;&#x53D1;&#x9001;&#x6210;&#x529F;");
          writer.flush();
          return;
        }
        continue;

      }
      message.put( "distinationId",Server.userId[i] );
      if (Server.userWrite[i] == null){
        continue;
      }
      if ( Server.userId[i].equals(this.userId) == false)
      {
        writer = user[i];
        writer.write(message.toString() + "\n");
        System.out.print("&#x8FDB;&#x6765;&#x4E86;");
        writer.flush();
      }else {
        writer = user[i];
        writer.write(message.toString() + "\n");
        System.out.print("&#x8FDB;&#x6765;&#x4E86;");
        writer.flush();
      }

    }
  }

  public  void synUserList(Map<string,string> message,String Id){
    BufferedWriter writer;
    BufferedWriter[] user =Server.userWrite;
    // &#x5C01;&#x88C5; &#x7528;&#x6237;&#x5217;&#x8868;
    // &#x89C4;&#x5B9A;&#x7528;&#x6237;&#x540D;&#x4E0D;&#x53EF;&#x4EE5;&#x6709;&#x7A7A;&#x683C;

    int len = Server.index;
    String userLis = "here";
    for (int i = 0; i< len ; i++)
    {
      System.out.println(userLis);
      if (Server.userWrite[i]!=null){
        if (message.get("userId").equals(Server.userId[i])){
          continue;
        }else {
          if (Server.userName[i] ==null){
            continue;
          }
          userLis = userLis + " " + Server.userName[i];
        }
      }
    }
    message.put( "distinationId",Id);
    message.put( "userList",userLis);
    message.put("messageclass","synUserList");

    for(int i =0; i< len;i++)
    {
      if (Server.userWrite[i] == null){
        continue;
      }
      if ( Server.userId[i].equals(Id))
      {
        writer = user[i];
        try {
          writer.write(message.toString() + "\n");
          writer.flush();
          return;
        } catch (IOException e) {
          e.printStackTrace();
        }
      }

    }

  }

  @Override
  public void run() {
    try (InputStream input = this.sock.getInputStream()) {
      try (OutputStream output = this.sock.getOutputStream()) {

        handle(input, output);
      }
    } catch (Exception e) {
      try {
        this.sock.close();
      } catch (IOException ioe) {
      }
      System.out.println("client disconnected.");
    }
  }

  private void handle(InputStream input, OutputStream output) throws IOException {
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8));
    BufferedReader reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8));
    this.writer = writer;
    this.reader = reader;
    int inde = Server.index;
    Server.index++;
    Server.userRead[inde] = reader;
    Server.userWrite[inde] = writer;
    Map<string,string> message=  new HashMap<string, string>();
    message.put("messageclass", "synId");// &#x666E;&#x901A; &#x6D88;&#x606F;
    message.put( "userId",userId );
    message.put( "userIndex",String.valueOf(inde) );
    String  to=message.toString();
    writer.write(to+'\n');
    writer.flush();
    for (;;) {
      String s = reader.readLine();

      if (s == null){
        continue;
      }
//      System.out.print(s);
//      synMessages(s);
      Map<string, string> mess= Client.mapStringToMap(s);
////      System.out.print(s);
      if(mess.get("messageclass").toString().equals("normally"))
      {
        System.out.print("irieowmxn");
        synMessage(mess);
        continue;

      }else  if (mess.get("messageclass").toString().equals("synUserName")){
        System.out.println("now synuser");
        String id = mess.get("userId");
        System.out.println(mess.toString());
        username = mess.get("user");
        int index = Integer.parseInt( mess.get("userIndex") );
        Server.userName[index] = username;
        // &#x540C;&#x6B65; &#x5728;&#x7EBF;&#x7528;&#x6237;
        Map<string,string> synuser=  new HashMap<string, string>();
        synuser.put("messageclass", "addUser");// &#x666E;&#x901A; &#x6D88;&#x606F;
        synuser.put( "userName",username );
        synMessage(synuser);

        // &#x540C;&#x6B65;&#x6240;&#x4EE5;&#x5DF2;&#x5728;&#x7EBF;&#x7528;&#x6237;&#xFF0C; &#x6709;&#x65B0;&#x7528;&#x6237; &#x767B;&#x5F55;
        // &#x5176;&#x5B9E;  &#x6211;&#x4EEC;&#x8FD8;&#x9700;&#x8981;   &#x56DE;&#x590D; &#x8BE5;&#x7528;&#x6237;&#xFF0C;  &#x73B0;&#x5728;&#x6709;&#x54EA;&#x4E9B;&#x5728;&#x7EBF;    &#x4EE5;&#x4FBF;&#x4E8E;  &#x540E;&#x6765;&#x767B;&#x5F55;&#x7684;&#x4EBA;   &#x7528;&#x6237;&#x5217;&#x8868;  &#x65E0;&#x6CD5;&#x66F4;&#x65B0;
        synUserList(message,id);
        continue;

      }else if ( mess.get("messageclass").toString().equals("userClose") ){
        Map<string,string> synuser=  new HashMap<string, string>();
        synuser.put("messageclass", "userClose");// &#x666E;&#x901A; &#x6D88;&#x606F;
        synuser.put( "userName",username );
        synMessage(synuser);
        int iin = Integer.parseInt(mess.get("userIndex"));
        Server.userWrite[iin] = null;
      }
      if (s.equals("bye")) {
        writer.write("bye\n");
        writer.flush();
        break;
      }
    }
  }
}

</string,></string,string></string,></string,string></string,></string,></string,string></string,string></string,string>

客户端:

package xcvcvcx;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.SocketAddress;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class Client extends JFrame implements ActionListener ,ItemListener {

  private String currentt_userName = null;

  //&#x5404;&#x79CD;&#x7EC4;&#x4EF6;
  JLabel jLabelSeverIP,jLabelSeverPort,jLabelReceiveData,jLabelSentData;
  JTextField jTextFieldSeverIP,jTextFieldSeverPort,jTextFieldSentData;
  JButton jButtonSetupSever,jButtonCloseNetwork,jButtonSent;
  JTextArea jTextAreaReceiveData;
  JButton jButtonExit;
  // &#x5F53;&#x524D;&#x5728;&#x7EBF;&#x7528;&#x6237;&#x90E8;&#x5206;
  JLabel jLabelOnlinUser;
  JComboBox jComboBoxOnlineUser;
  //&#x7EC4;&#x4EF6;&#x5B8C;&#x6BD5;

  BufferedReader reader;
  BufferedWriter writer;

  // &#x5B58;&#x50A8;&#x7528;&#x6237;&#x4FE1;&#x606F;
  JLabel jLabelusername;
  JTextField jTextFieldusername;

  String userId ;
  Socket sock;
  int userIndex;

  // &#x670D;&#x52A1;&#x8FDE;&#x63A5;&#x76F8;&#x5173;
  String ServerAddress ="192.168.43.240" ; // &#x53EF;&#x4EE5;&#x81EA;&#x5DF1;&#x8BBE;&#x7F6E;
  int port = 6666;

  public Client(){
    init();
  }

  public void init(){
    //&#x521D;&#x59CB;&#x5316;
    jLabelReceiveData=new JLabel("&#x63A5;&#x53D7;&#x6570;&#x636E;:");
    jLabelSentData=new JLabel("&#x53D1;&#x9001;&#x6570;&#x636E;:");
    jLabelSeverIP=new JLabel("&#x670D;&#x52A1;&#x5668;IP");
    jLabelSeverPort=new JLabel("&#x670D;&#x52A1;&#x5668;&#x7AEF;&#x53E3;");
    jTextFieldSentData=new JTextField(15);
    jTextFieldSeverIP=new JTextField(7);
    jTextFieldSeverPort=new JTextField(7);
    jButtonCloseNetwork=new JButton("&#x5173;&#x95ED;&#x670D;&#x52A1;");
    jButtonSent=new JButton("&#x53D1;&#x9001;");
    jButtonSetupSever=new JButton("&#x5F00;&#x542F;&#x670D;&#x52A1;");
    jTextAreaReceiveData=new JTextArea(20,15);
    JScrollPane scroller = new JScrollPane(jTextAreaReceiveData);
    scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    jTextAreaReceiveData.setWrapStyleWord(true);//&#x8BBE;&#x7F6E;&#x5355;&#x8BCD;&#x5728;&#x4E00;&#x884C;&#x4E0D;&#x8DB3;&#x5BB9;&#x7EB3;&#x65F6;&#x6362;&#x884C;
    jTextAreaReceiveData.setLineWrap(true);//&#x8BBE;&#x7F6E;&#x6587;&#x672C;&#x7F16;&#x8F91;&#x533A;&#x81EA;&#x52A8;&#x6362;&#x884C;&#x9ED8;&#x8BA4;&#x4E3A;true,&#x5373;&#x4F1A;"&#x81EA;&#x52A8;&#x6362;&#x884C;"
    //this.add(editArea,BorderLayout.CENTER);//&#x5411;&#x7A97;&#x53E3;&#x6DFB;&#x52A0;&#x6587;&#x672C;&#x7F16;&#x8F91;&#x533A;
    jButtonExit = new JButton("&#x9000;&#x51FA;");

    //&#x7EC4;&#x4EF6;&#x521D;&#x59CB;&#x5316;

    // &#x5B58;&#x50A8;  &#x7528;&#x6237;&#x4FE1;&#x606F;
    jLabelusername = new JLabel("&#x7528;&#x6237;&#x540D;");
    jTextFieldusername = new JTextField(10);
    jLabelOnlinUser = new JLabel("&#x5728;&#x7EBF;&#x7528;&#x6237;");
    jComboBoxOnlineUser = new JComboBox();
    jComboBoxOnlineUser.addItemListener(this::itemStateChanged);
    jComboBoxOnlineUser.addItem("self");

    JPanel panel1=new JPanel();
    panel1.setLayout(new FlowLayout());
    panel1.add(jLabelSeverIP);
    panel1.add(jTextFieldSeverIP);
    panel1.add(jLabelSeverPort);
    panel1.add(jTextFieldSeverPort);
    panel1.add(jButtonSetupSever);
    panel1.add(jButtonCloseNetwork);
    JPanel panel2=new JPanel();
    panel2.add(jLabelReceiveData);

    JPanel jPaneluserinfor = new JPanel();
    jPaneluserinfor.setLayout(new FlowLayout());
    jPaneluserinfor.add(jLabelusername);
    jPaneluserinfor.add((jTextFieldusername));
    jPaneluserinfor.add(jLabelOnlinUser);
    jPaneluserinfor.add(jComboBoxOnlineUser);

    JPanel jPanel1=new JPanel();
    jPanel1.setLayout(new GridLayout(3,1));
    jPanel1.add(panel1);
    jPanel1.add(jPaneluserinfor);
    jPanel1.add(panel2);

    JPanel panel3=new JPanel();
    panel3.setLayout(new FlowLayout());
    panel3.add(jLabelSentData);
    JPanel panel4=new JPanel();
    panel4.setLayout(new FlowLayout());
    panel4.add(jTextFieldSentData);
    panel4.add(jButtonSent);
    panel4.add(jButtonExit);

    JPanel jPanel2=new JPanel();
    jPanel2.setLayout(new GridLayout(2,1));
    jPanel2.add(panel3);
    jPanel2.add(panel4);

    JPanel jPanel=new JPanel();
    jPanel.setLayout(new BorderLayout());
    jPanel.add(jPanel1,BorderLayout.NORTH);
    jPanel.add(scroller,BorderLayout.CENTER);
    jPanel.add(jPanel2,BorderLayout.SOUTH);
    //&#x5B8C;&#x6210;&#x7EC4;&#x4EF6;&#x7EC4;&#x5408;

    jButtonSent.addActionListener(this);
    jButtonSetupSever.addActionListener(this);
    jButtonCloseNetwork.addActionListener(this);
    jButtonExit.addActionListener(this);

    setSize(600,400);
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    add(jPanel);
    setVisible(true);
    //&#x663E;&#x793A;
    jButtonCloseNetwork.setEnabled(false);

    jTextFieldSeverIP.setText(ServerAddress);
    jTextFieldSeverPort.setText(String.valueOf(port));
    jTextAreaReceiveData.append("&#x672C;&#x7A0B;&#x5E8F;&#x53EA;&#x7528;&#x4E8E;&#x7B80;&#x5355;&#x6F14;&#x793A;&#xFF0C;\n&#x82E5;&#x8981;&#x4FEE;&#x6539;&#x670D;&#x52A1;&#x5668;&#x5730;&#x5740;&#x6216;&#x7AEF;&#x53E3;&#xFF0C;&#x8BF7;&#x4FEE;&#x6539;&#x6307;&#x5B9A;&#x4EE3;&#x7801;&#xFF0C;&#x6682;&#x4E0D;&#x652F;&#x6301;&#x624B;&#x52A8;&#x6307;&#x5B9A;\n\n\n");

    // &#x8FDE;&#x63A5;&#x670D;&#x52A1;&#x5668;
    try {
      Socket sock = new Socket(ServerAddress, port);
      this.sock = sock;
      try (InputStream input = sock.getInputStream()) {
        try (OutputStream output = sock.getOutputStream()) {
          BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8));
          BufferedReader reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8));
          SocketAddress id =  sock.getRemoteSocketAddress();
          userId = sock.getRemoteSocketAddress().toString();
          this.writer =writer;
          this.reader = reader;
          while(true)
            for (; ; ) {
              String resp = reader.readLine();
              while (resp == null) {
                resp = reader.readLine();
              }
              System.out.println("<<< " + resp);
              Map<string, string> message = mapStringToMap(resp);
              if (message.get("messageclass").equals("synId")) {
                System.out.println(userId);
                userId = message.get("userId");
                System.out.println(message.keySet());
                System.out.println(userId);
                // &#x66F4;&#x65B0; &#x670D;&#x52A1;&#x5668; &#x63A5;&#x53E3; &#x5904;&#x7684;  &#x5185;&#x5BB9;
                jTextAreaReceiveData.append("&#x5DF2;&#x4E3A;&#x60A8;&#x6210;&#x529F;&#x5206;&#x914D;id  &#x8BF7;&#x586B;&#x5199;&#x7528;&#x6237;&#x540D;&#xFF0C;&#x5E76;&#x5F00;&#x542F;&#x670D;&#x52A1;");
                jTextAreaReceiveData.append(resp);
                jTextAreaReceiveData.append("\n");
                userIndex = Integer.parseInt(message.get("userIndex"));
                continue;
              } else if (message.get("messageclass").equals("normally")) {
                resp = message.toString();
                System.out.print("748328");
                // &#x6B63;&#x5E38;&#x6D88;&#x606F;
                String showMess = "";
                String dist = message.get("distination");
                if (dist.equals("all")){
                  showMess = showMess.concat("&#x6D88;&#x606F;&#x7C7B;&#x578B;:&#x5168;&#x4F53;&#x6D88;&#x606F;" + '\n');

                }else {
                  showMess = showMess.concat("&#x6D88;&#x606F;&#x7C7B;&#x578B;:&#x79C1;&#x53D1;&#x6D88;&#x606F;" + '\n');
                }
                showMess = showMess.concat("&#x6D88;&#x606F;&#x65F6;&#x95F4;: " + message.get("time") +  '\n');
                showMess = showMess.concat("&#x6D88;&#x606F;&#x5185;&#x5BB9;: " + message.get("content") +  '\n');
                showMess = showMess.concat("&#x6D88;&#x606F;&#x6765;&#x6E90;: " + message.get("user") +  '\n');
                jTextAreaReceiveData.append(showMess);
                jTextAreaReceiveData.append("\n\n");

              } else if (message.get("messageclass").equals("addUser")) {
                if (currentt_userName ==null){
                  continue;
                }
                System.out.println(message.toString());
                String newname = message.get("userName");
                if (newname.equals(currentt_userName) == false) {
                  jComboBoxOnlineUser.addItem(newname);
                  jTextAreaReceiveData.append("&#x6709;&#x65B0;&#x7528;&#x6237;&#x4E0A;&#x7EBF;&#x4E86;&#xFF1A;&#x4ED6;&#x662F;: " + newname + "\n\n" );
                }

              } else if (message.get("messageclass").toString().equals("userClose")) {
                String name = message.get("userName");
                System.out.println("&#x73B0;&#x5728; &#x5220;&#x9664; user: " + name);
                jTextAreaReceiveData.append("&#x6709;&#x7528;&#x6237;&#x4E0B;&#x7EBF;&#x4E86;&#xFF1A;&#x4ED6;&#x662F;: " + name + "\n\n" );
                jComboBoxOnlineUser.removeItem(name);
              }else if( message.get("messageclass").toString().equals("synUserList") ){
                String Lis = message.get("userList");
                String[] UserList = Lis.split(" ");
                int i;
                for(i=1; i<userlist.length;i++) { jcomboboxonlineuser.additem(userlist[i]); } catch (ioexception e) e.printstacktrace(); public static map<string,string> mapStringToMap(String str){
    str=str.substring(1, str.length()-1);
    System.out.println("ishere dk->" + str);
    String[] strs=str.split(",");
    Map<string,string> map = new HashMap<string, string>();
    for (String string : strs) {
      String key=string.split("=")[0];
      String value=string.split("=")[1];
      value = value.trim();
      key = key.trim();
      map.put(key, value);
    }
    return map;
  }

  public static void main(String[] args) throws IOException {
     Client a = new Client();
  }

  private static void handle(InputStream input, OutputStream output) throws IOException {
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8));
    BufferedReader reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8));
    Scanner scanner = new Scanner(System.in);
    System.out.println("[server] " + reader.readLine());
    for (;;) {
      System.out.print(">>> "); // &#x6253;&#x5370;&#x63D0;&#x793A;
      String s = scanner.nextLine(); // &#x8BFB;&#x53D6;&#x4E00;&#x884C;&#x8F93;&#x5165;
      writer.write(s);
      writer.newLine();
      writer.flush();
      String resp = reader.readLine();
      System.out.println("<<< " + resp);
      if (resp.equals("bye")) {
        break;
      }
    }
  }
  void update() throws IOException {
    for (;;) {
      System.out.print("lkdfvmndfjk");
      String resp = reader.readLine();
      System.out.println("<<< " + resp);
      jTextAreaReceiveData.append(resp);
      if (resp.equals("bye")) {
        break;
      }
    }
  }

  static String time (){
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//&#x8BBE;&#x7F6E;&#x65E5;&#x671F;&#x683C;&#x5F0F;
    return df.format( new Date() ).toString();
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    if (e.getSource()==jButtonSent){
        if (jTextFieldSentData.getText() == "") {
          jTextAreaReceiveData.append("&#x53D1;&#x9001;&#x4E0D;&#x53EF;&#x4E3A;&#x7A7A;"+"\n");
        }else {
          this.currentt_userName = jTextFieldusername.getText().toString();
          Map<string,string> message=  new HashMap<string, string>();
          message.put("messageclass", "normally");// &#x666E;&#x901A; &#x6D88;&#x606F;
          message.put("user",currentt_userName);
          message.put( "userId",userId );
          String  to=jTextFieldSentData.getText();
          message.put("content",to);
          message.put("time",time());
          String distina =   jComboBoxOnlineUser.getSelectedItem().toString();
          if (distina.equals("self")){
            // &#x53D1;&#x7ED9;&#x6240;&#x6709;&#x4EBA;
            System.out.println("&#x67E5;&#x770B;");
            message.put("distination","all");
          }else {
            // &#x53D1;&#x7ED9;&#x67D0;&#x4EBA;
            message.put("distination",distina);
          }

          String ans  = message.toString();
          to = ans;
          try {
            writer.write(to+"\n");
            writer.flush();
          }catch (Exception ee){
            System.out.println(ee.toString());
            jTextAreaReceiveData.append("&#x53D1;&#x9001;&#x5931;&#x8D25;"+"\n");
          }
        }
      }else if (e.getSource() == jButtonCloseNetwork){
      try {
        sock.close();
      } catch (IOException e1) {
        e1.printStackTrace();
      }

    }else if(e.getSource() == jButtonSetupSever){
      String name = jTextFieldusername.getText();
      if (name.equals("")){
        jTextAreaReceiveData.append("&#x7528;&#x6237;&#x540D;&#x4E0D;&#x53EF;&#x4E3A;&#x7A7A;");
        // &#x4E0D;&#x53EF;&#x4E3A;&#x7A7A;  &#x63D0;&#x793A;
        return;
      }
      currentt_userName = name;
      Map<string,string> message=  new HashMap<string, string>();
      message.put("messageclass", "synUserName");// &#x666E;&#x901A; &#x6D88;&#x606F;
      message.put("user",currentt_userName);
      message.put( "userId",userId );
      message.put( "userIndex",String.valueOf(userIndex) );
      try {
        writer.write(message.toString()+"\n");
        writer.flush();
        jButtonCloseNetwork.setEnabled(true);
        jButtonSetupSever.setEnabled(false);
      } catch (IOException e1) {
        e1.printStackTrace();
      }
      // &#x540C;&#x6B65;  &#x7528;&#x6237;&#x540D;

    }else if (e.getSource()== jButtonExit){
      // &#x5173;&#x95ED;&#x6309;&#x94AE;
      Map<string,string> message=  new HashMap<string, string>();
      message.put("messageclass", "userClose");// &#x666E;&#x901A; &#x6D88;&#x606F;
      message.put("user",currentt_userName);
      message.put( "userId",userId );
      message.put( "userIndex",String.valueOf(userIndex) );
      try {
        writer.write(message.toString()+"\n");
        writer.flush();
        System.out.println(message.toString());
      } catch (IOException e1) {
        e1.printStackTrace();
      }// &#x53D1;&#x9001;&#x4E0B;&#x7EBF;&#x6D88;&#x606F;

      jComboBoxOnlineUser.removeAllItems();
    }

  }

  @Override
  public void itemStateChanged(ItemEvent e) {

  }
}

</string,></string,string></string,></string,string></string,></string,string></string,></string,string></userlist.length;i++)></string,>

里面的ip地址 我写的是我自己的 想改的可以自己改

演示视频放B站了: https://www.bilibili.com/video/BV1JL411j7E1/

个人作品, 如有错误,请指出; 如要转载,请注明出处。 三克油。。

Original: https://www.cnblogs.com/cndccm/p/15709303.html
Author: Mr小明同学
Title: java实现简易的局域网对话系统

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/573010/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 分布式session的解决方法

    一、背景 上篇博客,使用微博社交登录谷粒商城后,将用户信息保存在session中,此时进入到谷粒商城的任何页面都需要能够取到用户信息, 谷粒商城首页(gulimall.com/in…

    Java 2023年5月30日
    072
  • 设计模式总结

    1.单例模式 目的: 饿汉式 懒汉式 2.代理模式 目的: 3.修饰器模式 目的: 4.模板模式 目的: 本文来自博客园,作者:紫英626,转载请注明原文链接:https://ww…

    Java 2023年6月5日
    077
  • CocosCreator中worldMatrix到底是什么(中)

    Cocos Creator 中 _worldMatrix 到底是什么(中) 1. 中篇摘要 在上篇中主要做了三件事 简单表述了矩阵的基本知识,以及需要涉及到的三角函数知识 推导了图…

    Java 2023年6月13日
    073
  • Docker安装配置Oracle详细教程(以作持久化处理)

    Docker安装Oracle 1,拉取Oracle镜像,拉取成功后查看 &#xA0;docker&#xA0;pull&#xA0;registry.cn-ha…

    Java 2023年6月15日
    080
  • virtual box入门使用+踩坑

    事实上我并不是完全安装上面步骤进行安装,在vagrant 使用上,我选择的是使用命令行 进行虚拟机配置。 安装完virtual后,记得把虚拟机存储路径变为非C盘。不然C盘分分钟爆炸…

    Java 2023年6月7日
    069
  • 程序员的自我修养一书的学习 页映射

    页映射,弄得不老懂,进程虚拟地址空间 与 磁盘上的目标文件 映射, 进程虚拟地址空间 与 物理内存 映射, 物理内存 与 磁盘上的目标文件 映射, 三方 都互相关联了。 缺页, 进…

    Java 2023年6月13日
    069
  • 7、System类

    exit 退出当前程序 System.out.println("ok1"); //1. exit(0) 表示程序退出 //2. 0 表示一个状态,正常的状态 S…

    Java 2023年6月7日
    078
  • 并发编程之:synchronized

    大家好,我是小黑,一个在互联网苟且偷生的农民工。 之前的文章中跟大家分享了关于Java中线程的一些概念和基本的使用方法,比如如何在Java中启动一个线程,生产者消费者模式等,以及如…

    Java 2023年6月7日
    0100
  • 快速整明白Redis中的字典到底是个啥

    字典简介 字典是一种用于保存键值对的数据结构,可以通过键值对中的键快速地查找到对应的值。在Redis所使用的C语言中,并没有内置字典,所以Redis自己实现了字典。 整个Redis…

    Java 2023年6月7日
    067
  • 我是一个Dubbo数据包…

    hello,大家好呀,我是小楼! 今天给大家带来一篇关于Dubbo IO交互的文章,本文是一位同事写的文章,用有趣的文字把枯燥的知识点写出来,通俗易懂,非常有意思,所以迫不及待找作…

    Java 2023年6月6日
    0111
  • 基于微前端qiankun的多页签缓存方案实践

    作者:vivo 互联网前端团队- Tang Xiao 本文梳理了基于阿里开源微前端框架qiankun,实现多页签及子应用缓存的方案,同时还类比了多个不同方案之间的区别及优劣势,为使…

    Java 2023年6月15日
    096
  • python资料

    Python基础参考资料https://www.liaoxuefeng.com/wiki/1016959663602400 Python链接数据库、Flask、Flask Rest…

    Java 2023年6月5日
    092
  • 瀑布流ListView

    前言 终于忙完了一段时间,现在前段时间写的一个瀑布流ListView到想法分享下,这个东西是扩展自Listview,当列表内容拉到最后后触发刷新操作,以便抓取更多到数据。 先贴下整…

    Java 2023年6月7日
    069
  • leetcode_19. 删除链表的倒数第 N 个结点

    这个题目是我在leetcode上写出来的第一道题目。 题目表述 给你一个链表,删除链表的倒数第 n个结点,并且返回链表的头结点。 ++i 和 i++ i++会产生一个临时变量,而 …

    Java 2023年6月5日
    081
  • MyBatis拦截器

    MyBatis拦截器的作用是在于Dao到DB中间进行额外的处理。大部分情况下通过mybatis的xml配置sql都可以达到想要的DB操作效果,然而存在一些类似或者相同的查询条件或者…

    Java 2023年6月7日
    070
  • git 常用命令

    来时绿叶阑珊,愿走时鲜花绽开。。。。。。不经意间的指尖流沙岁月透微笑,伤心处静坐溪水泪潸然,人生就两个字:”如梦”。 git clone git://git…

    Java 2023年6月16日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球