java基于C/S模式实现聊天程序(客户端)

  

经过这几天对java的学习,用java做了这个计算机网络的课程设计,基于C/S模式的简单聊天程序,此篇文章介绍一些客户端的一些东西。
  

  

先讲一讲此聊天程序的基本原理,客户端发送消息至服务器,服务器收到消息之后将其转发给连接服务器的所有客户端,来自客户端的消息中包含发件人的名字。
  

  

客户端的主要功能是发送消息和接收消息,客户端设置好了端口和服务器地址,并创立客户端自己的套接字,用作和服务器通信的一个标识。布局就不多说了,主要说说监视器和两个重要的线程:发送和接收。
  

  

监视器中,登录按钮触发的功能是设置用户名,并且建立和服务器的连接,同时还要创建接收线程,并使其开始运行。
  

  

下面说一说,发送和接收的线程:发送线程是建立数据输出流,将想要文本输入区中的消息以UTF字符串的形式写入到数据流中,并且在发送成功后清空输入框。并且该线程由“发送“按钮触发。
  

  

接收线程是在登录之后就建立的,线程中建立输入流,并且读出流中的UTF字符串,将其显示到文本展示区,就完成了信息的接收。
  

  

客户端大致的功能和组成就是这些了,下一篇我将讲一下有关服务器的东西。
  

  

界面展示:

  

癹ava基于C/S模式实现聊天程序(客户端)"
  

        包的客户;      进口java.awt。*;   进口java.awt.event。*;   进口. io . *;   进口java.net。*;   进口java.util。*;      进口javax.swing。*;      公共类客户端扩展JFrame {      套接字clientsocket=零;   DataInputStream=零;   DataOutputStream=零;   JTextArea inputText;   字符串SerAddress=?92.168.1.100”;   int SendPort=8888;   JTextField昵称;   JTextArea textShow;   setbutton JButton按钮;      公共端(){//构造函数,创建一个布局并初始化   init ();   setVisible(真正的);   setDefaultCloseOperation (JFrame.DO_NOTHING_ON_CLOSE);   setBounds (480, 160, 340, 460);   setTitle(“好好学习天天向上聊天室”);   setResizable(假);      }      无效的init(){//初始化函数,设置布局并且设置监视器      inputText=new JTextArea (29);      按钮=new JButton(“发送”);   JLabel标签=new JLabel(“昵称”);   setbutton=new JButton(“登录”);   textShow=new JTextArea (29);   textShow.setEditable(假);   昵称=new JTextField (10);   inputText。setBackground(新颜色(45、210、209));   setLayout(新FlowLayout ());   getContentPane ()。setBackground(新颜色(20、85、237));   添加(新JScrollPane (textShow));   textShow。setBackground(新颜色(45、210、209));   setbutton。setBackground(新颜色(236、134、21));   按钮。setBackground(新颜色(236、134、21));   昵称。setBackground(新颜色(45、210、209));   标签。setForeground(新颜色(243、243、14));   添加(标签);   添加(昵称);   添加(setbutton);   添加(新JScrollPane (inputText));   添加(按钮);   setbutton。addActionListener(新ActionListener(){//添加监视器   公共空间actionPerformed (ActionEvent e) {      线程readData;   读阅读=零;   尝试{   clientsocket=新的套接字();   读=new读();   readData=https://www.yisu.com/zixun/new线程(阅读);   如果(clientsocket.isConnected ()) {      其他}{   InetAddress地址=InetAddress.getByName (SerAddress);   InetSocketAddress socketAddress=新的InetSocketAddress(都   地址,SendPort);   clientsocket.connect (socketAddress)都;   textShow。附加(新text。SimpleDateFormat (“yy-MM-dd HH: mm: ss”)。新日期格式(())   + " \ n与服务器连接成功\ n已登录聊天室\ n”);   在新DataInputStream=(clientsocket.getInputStream ());=new DataOutputStream (clientsocket   .getOutputStream ());   read.setDataInputStream(的);   readData.start ();   }   }捕捉(异常e1) {   textShow。追加(新java.text.SimpleDateFormat (   “yy-MM-dd HH: mm: ss”)。新日期格式(())   + " \ n服务器连接失败\ n”);   }      }   });      按钮。addActionListener(新ActionListener () {   公共空间actionPerformed (ActionEvent e) {   发送发送=new发送();   线程sendData=https://www.yisu.com/zixun/new线程(发送);   send.setDataOutputStream(出);   sendData.start ();      }      });   addWindowListener(新WindowAdapter(){//响应关闭按钮的功能   公共空间windowClosing (WindowEvent e) {   int选项=JOptionPane   .showConfirmDialog(零,“亲爱的你真的要离开聊天室么?”,   “好好学习,天天向上”,JOptionPane.YES_NO_OPTION,   JOptionPane.QUESTION_MESSAGE);   如果(选项==JOptionPane.YES_OPTION)   system . exit (0);   }   });   }//init结束      类阅读实现Runnable{//读取输入流的线程   DataInputStream;      公共空间setDataInputStream (DataInputStream) {   这一点。在=;   }      公共空间run () {   字符串的结果;   而(真){   尝试{   结果=in.readUTF ();   textShow。追加(新java.text.SimpleDateFormat (   “yy-MM-dd HH: mm: ss”)。新日期格式(())   +“\ n”   +结果);   }捕捉(IOException e) {   textShow。追加(新java.text.SimpleDateFormat (   “yy-MM-dd HH: mm: ss”)。新日期格式(())   + " \ n与服务器断开连接\ n”);   打破;   }   }   }   }      类将实现Runnable{//发送消息的输出流线程   DataOutputStream;      公共空间setDataOutputStream (DataOutputStream) {   这一点。出=;   }      公共空间run () {   字符串消息=零;   消息=NickName.getText () +“:”+ inputText.getText () +“\ n”;   尝试{   out.writeUTF(消息);   inputText.setText (" ");   }捕获异常(e2) {   textShow.append(“发送失败:未连接到服务器\ n”);   }      }   }      公共静态void main (String参数[]){   客户端=新客户();   }   }   

java基于C/S模式实现聊天程序(客户端)