温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java socket如何实现聊天小程序

发布时间:2021-05-28 11:54:09 来源:亿速云 阅读:139 作者:小新 栏目:编程语言

这篇文章给大家分享的是有关java socket如何实现聊天小程序的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

java socket如何实现聊天小程序

java socket如何实现聊天小程序

服务器

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();
  }
 } 
 } 
}

感谢各位的阅读!关于“java socket如何实现聊天小程序”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI