基于java socket实现 聊天小程序

 更新时间:2019年12月31日 13:15:59   作者:v慕言  
这篇文章主要介绍了基于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实现 聊天小程序,希望对大家有所帮助!

相关文章

  • SpringCloudGateway路由失效问题

    SpringCloudGateway路由失效问题

    本文主要分析了SpringCloudGateway整合nacos时路由失效的问题,作者通过断点跟踪发现在RouteToRequestUrlFilter类中报错,原因是在读取配置文件的时候,没有解析到对应的host主机,进一步发现这里包含了一段正则表达式验证,验证配置的服务名称是否合法
    2024-10-10
  • IDEA中maven依赖报红的问题解决办法

    IDEA中maven依赖报红的问题解决办法

    这篇文章主要给大家介绍了关于IDEA中maven依赖报红的问题解决办法,在使用IDEA过程中,经常会出现maven依赖报红的问题,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • Java设置Access-Control-Allow-Origin允许多域名访问的实现方法

    Java设置Access-Control-Allow-Origin允许多域名访问的实现方法

    这篇文章主要介绍了Java设置Access-Control-Allow-Origin允许多域名访问的实现方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10
  • Java8中的LocalDateTime和Date一些时间操作方法

    Java8中的LocalDateTime和Date一些时间操作方法

    这篇文章主要介绍了Java8中的LocalDateTime和Date一些时间操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • vue+ java 实现多级菜单递归效果

    vue+ java 实现多级菜单递归效果

    这篇文章主要介绍了vue+ java 实现多级菜单递归效果,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • 图书信息管理java实现代码

    图书信息管理java实现代码

    这篇文章主要为大家详细介绍了图书信息管理java实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Java logback日志的简单使用

    Java logback日志的简单使用

    这篇文章主要介绍了Java logback日志的使用详解,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-03-03
  • Java Stream流语法示例详解

    Java Stream流语法示例详解

    这篇文章主要为大家详细介绍了Java的Stream流,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Mybatis的几种传参方式详解

    Mybatis的几种传参方式详解

    这篇文章主要介绍了Mybatis的几种传参方式详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Docker容器中的SSH免密登录详解

    Docker容器中的SSH免密登录详解

    这篇文章主要介绍了Docker容器中的SSH免密登录详解,在日常的开发和测试环境中经常需要创建和管理Docker容器,有时,出于调试或管理的目的,可能需要SSH到容器内部,本文将介绍如何创建一个Docker容器,它在启动时自动运行SSH服务,并支持免密登录,需要的朋友可以参考下
    2023-08-08

最新评论