热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

基于javasocket实现聊天小程序

这篇文章主要介绍了基于javasocket实现聊天小程序,代码分为服务器和客户端,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

服务器

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实现 聊天小程序,希望对大家有所帮助!


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • 在项目中使用 Redis 时,了解其不同架构模式(如单节点、主从复制、哨兵模式和集群)对于确保系统的高可用性和扩展性至关重要。本文将详细探讨这些模式的特点和应用场景。 ... [详细]
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • 本周信息安全小组主要进行了CTF竞赛相关技能的学习,包括HTML和CSS的基础知识、逆向工程的初步探索以及整数溢出漏洞的学习。此外,还掌握了Linux命令行操作及互联网工作原理的基本概念。 ... [详细]
  • C语言基础入门:7个经典小程序助你快速掌握编程技巧
    本文精选了7个经典的C语言小程序,旨在帮助初学者快速掌握编程基础。通过这些程序的实践,你将更深入地理解C语言的核心概念和语法结构。 ... [详细]
  • 2020初级电工模拟题库与实操视频指南
    本文提供2020年初级电工模拟考试题库及实操视频资源,涵盖最新大纲和真题解析,帮助考生高效备考。内容包括理论知识、实操技能以及详细答案解析,适用于全国各地区电工(初级)考试。 ... [详细]
  • 本教程将详细介绍Python中的包、模块、类和函数的概念,探讨它们在程序中的作用及相互关系,帮助读者更好地理解Python的结构化编程。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
  • 国庆头像生成小程序体验
    介绍一个可以快速生成带有国旗元素的国庆头像的小程序,带您回顾这一流行趋势。 ... [详细]
  • 微信小程序:授权登录与手机号绑定
    本文详细介绍了微信小程序中用户授权登录及绑定手机号的流程,结合官方指引和实际开发经验,提供了一套完整的实现方案,帮助开发者更好地理解和应用。 ... [详细]
  • 在使用Netty 4.1.48版本运行自带的HTTP服务器示例时,观察到大量本地IP环回连接。本文将探讨这些环回连接的原因,并解释其与TCP连接的关系。 ... [详细]
  • 程序员如何优雅应对35岁职业转型?这里有深度解析
    本文探讨了程序员在职业生涯中如何通过不断学习和技能提升,优雅地应对35岁左右的职业转型挑战。我们将深入分析当前热门技术趋势,并提供实用的学习路径。 ... [详细]
  • 本文深入探讨了小程序中父组件与子组件之间的数据传递方式,特别是通过事件触发和属性绑定实现的值传递机制。文中详细介绍了如何从子组件向父组件传递数据,并进一步由父组件传递给其他子组件。 ... [详细]
  • 本文详细介绍了Java的安装、配置、运行流程以及有效的学习方法,旨在帮助初学者快速上手Java编程。 ... [详细]
author-avatar
中国有程序猿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有