使用javasocket怎么实现一个聊天小程序
创始人
2024-12-24 18:42:46
0次

服务器

package demo04;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.DataInputStream;import java.io.DataOutputStream;import java.net.ServerSocket;import java.net.Socket;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.ScrollPaneConstants;public class ownServer { public static void main(String[] args) { // TODO Auto-generated method stub new Server().launch(); }}class Server{ JFrame frame; JTextArea taArea; JTextField tfField; JButton sbButton; DataInputStream read ; DataOutputStream write; ServerSocket scServerSocket;  Socket socket;  public void launch() { CreateUI(); CreateNetWork(); new ServerWrite().start(); new ServerRead().start(); }  public void CreateUI() { frame = new JFrame("MM Server"); JPanel Panle = new JPanel(); taArea = new JTextArea(15,25); taArea.setLineWrap(true); taArea.setWrapStyleWord(true); taArea.setEditable(true); JScrollPane qScroller=newJScrollPane(taArea);  qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);          qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); tfField = new JTextField(20); sbButton = new JButton("发送"); Panle.add(qScroller); Panle.add(tfField); Panle.add(sbButton);     frame.getContentPane().add(BorderLayout.CENTER,Panle);    frame.setSize(400,400);    frame.setVisible(true);  } public void close() { try {  write.close();  read.close();  socket.close();  scServerSocket.close(); } catch (Exception e) {  System.exit(-1); } }  public void CreateNetWork() {    try {   scServerSocket =new ServerSocket(7780);  socket= scServerSocket.accept();  read = new DataInputStream(socket.getInputStream());  write = new DataOutputStream(socket.getOutputStream());    System.out.print("网络连接");  } catch (Exception e) {  // TODO: handle exception  e.printStackTrace(); }  } class ServerRead extends Thread{ public void run() {   while (true) {   try {   String message = read.readUTF();   taArea.append("对方:"+message+ "\n");  } catch (Exception e1) {  // TODO: handle exception  JOptionPane.showMessageDialog(taArea, "提示: 服务端已经断开连接");    //e.printStackTrace();  //System.exit(-1);  return ;  }    } } }class ServerWrite extends Thread{  public void run() {  tfField.addActionListener(new ServerListen());  sbButton.addActionListener(new ServerListen()); } } class ServerListen implements ActionListener{ @Override public void actionPerformed(ActionEvent e) {  try {  String str = tfField.getText();  tfField.setText("");  taArea.append("我: " + str + "\n");  write.writeUTF(str);    } catch (Exception e2) {  // TODO: handle exception  e2.printStackTrace();  } }  } }

客户端

package demo04;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.DataInputStream;import java.io.DataOutputStream;import java.net.Socket;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.ScrollPaneConstants;public class ownClient { public static void main(String[] args) { // TODO Auto-generated method stub new Client().launch(); }}class Client{ JTextArea taArea; JTextField tfField; JButton sbButton; DataInputStream read = null; DataOutputStream write = null; Socket socket; public void launch() { CreateUI(); CreatNetWork(); new ClientRead().start();; new ClientWrite().start();; } public void CreateUI() { JFrame frame = new JFrame("MM Client"); JPanel Panle = new JPanel(); taArea = new JTextArea(15,25); taArea.setLineWrap(true); taArea.setWrapStyleWord(true); taArea.setEditable(true); JScrollPane qScroller = new JScrollPane(taArea); qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);  tfField = new JTextField(20); sbButton = new JButton("发送");  Panle.add(qScroller); Panle.add(tfField); Panle.add(sbButton);       frame.getContentPane().add(BorderLayout.CENTER,Panle);    frame.setSize(400,400);    frame.setVisible(true); } public void CreatNetWork() { // TODO Auto-generated method stub try {  socket = new Socket("127.0.0.1",7780);  write = new DataOutputStream(socket.getOutputStream());  read = new DataInputStream(socket.getInputStream());  System.out.print("已建立网络连接"); } catch (Exception e) {  // TODO: handle exception  e.printStackTrace(); } } class ClientRead extends Thread{  public void run() {    while (true) {   try {   String message= read.readUTF();   taArea.append("对方:"+message+ "\n");    } catch (Exception e1) {  // TODO: handle exception  JOptionPane.showMessageDialog(taArea, "提示: 客户端已经断开连接");    //e.printStackTrace();  //System.exit(-1);  return ;  }     } } }  class ClientWrite extends Thread{  public void run() {    tfField.addActionListener(new ClientListen());  sbButton.addActionListener(new ClientListen());  } }  class ClientListen implements ActionListener{ @Override public void actionPerformed(ActionEvent e) {  try {    String str = tfField.getText();  tfField.setText("");  taArea.append("我: " + str + "\n");  write.writeUTF(str);    } catch (Exception e2) {  // TODO: handle exception  e2.printStackTrace();  } }  } }

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...