基于Socket的客户端服务端通信--Java GUI界面小程序

Socket概念及其通信过程:

Socket是TCP/IP中的基本概念,它负责将TCP/IP包发送到指定的IP地址。也可以看成是在两个程序进行通信连接中的一个端点,一个程序将 信息写入Socket中(类似于插座),该Socket将这段信息发送到另一个Socket中(类似于插头),使这段信息能够传送到其他程序。这两端的程序可以是在一台计算机 上,也可以在因特网的远程计算机上。

当两个程序需要通信时,可以使用Socket类建立套接字连接。呼叫的一方称为客户机,负责监听的一方称为服务器。 由于TCP/IP协议是基于连接的、可靠的协议,所以客户机服务器可以在这条连接上可靠地传输数据。服务器所用的套接字是ServerSocket, 客户机所用的套接字是Socket。一个Socket由一个IP地址和一 个端口号唯一确定 。
在传统的UNIX环境下可以操作TCP/IP协议的接口不止Socket一个,Socket 所支持的协议种类也不光TCP/IP -种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。
使用Socket 进行Client/Server程序设计的一般连接过程 是这样的: Server 端Listen (监听)某个端口是否有连接请求,Client 端向Server端发出Connect (连接)请求,Server 端向Client端发回Accept (接收)消息。-个连接就建 立起来了。Server 端和Client端都可以通过Send和Write等方法与对方通信。
对于一个功能齐全的Socket,其工作过程包含以下4个基本的步骤。

  1. 创建Socket
  2. 打开连接到Socket的输入/输出流。
  3. 按照一定的协议对Socket进行读写操作。
  4. 关闭Socket。

当用户输入一行文字时,程序将接受数据部分放在线程中,它始终在后台运行,一旦对方发来数据,就立即显示在界面上。而主界面负责输入文字和发送数据,这样发送和接受数据互不影响。

服务端代码:

import java.io.*;
import java.net. *;
import java. awt.event. *;
import java.awt.*;
import javax. swing.*;public class ChatServer implements ActionListener, Runnable {JTextArea showArea;JTextField msgText;JFrame mainJframe;JButton sentBtn;JScrollPane JSPane;JPanel pane;Container con;Thread thread = null;ServerSocket serverSocket;Socket connectToClient;DataInputStream inFromClient;DataOutputStream outToClient;public ChatServer() {//设置界面mainJframe = new JFrame("聊天——服务端");con = mainJframe.getContentPane();showArea = new JTextArea();showArea.setEditable(false);showArea.setLineWrap(true);JSPane = new JScrollPane(showArea);msgText = new JTextField();msgText.setColumns(30);msgText.addActionListener(this);sentBtn = new JButton("发送");sentBtn.addActionListener(this);pane = new JPanel();pane.setLayout(new FlowLayout());pane.add(msgText);pane.add(sentBtn);con.add(JSPane, BorderLayout.CENTER);con.add(pane, BorderLayout.SOUTH);mainJframe.setSize(500, 400);mainJframe.setVisible(true);mainJframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);;try {//创建服务套接字serverSocket = new ServerSocket(5500);showArea.append("正在等待对话请求...\n");//侦听客户端的连接connectToClient = serverSocket.accept();inFromClient = new DataInputStream(connectToClient.getInputStream());outToClient = new DataOutputStream(connectToClient.getOutputStream());//启动线程在后台来接收对方的消息thread = new Thread(this);thread.setPriority(Thread.MIN_PRIORITY);thread.start();} catch (IOException e) {showArea.append("对不起,不能创建服务器\n");msgText.setEditable(false);sentBtn.setEnabled(false);}}public static void main(String[] args){new ChatServer();}@Override//响应按钮事件,发送消息给对方public void actionPerformed(ActionEvent e) {String s = msgText.getText();if (s.length() > 0) {try {outToClient.writeUTF(s);outToClient.flush();showArea.append("我(服务端)说:" + msgText.getText() + "\n");msgText.setText(null);} catch (IOException el) {showArea.append("你的消息:“" + msgText.getText() + "”未能发出去!\n");}}}@Override//本线程负责将客户机传来的信息显示在对话区域public void run() {try{while (true){showArea.append("客户端说:"+inFromClient.readUTF()+"\n");Thread.sleep(1000);}} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}}

客户端代码:

import java.io.*;
import java .net.*;
import java. awt.event.*;
import java.awt.*;
import javax. swing.*;public class ChatClient implements ActionListener,Runnable{JTextArea showArea;JTextField msgText;JFrame mainJframe;JButton sentBtn;JScrollPane JSPane;JPanel pane;Container con;Thread thread=null;Socket connectToServer;DataInputStream inFromServer;DataOutputStream outToServer;public ChatClient(){mainJframe=new JFrame("聊天——客户端");con=mainJframe.getContentPane();showArea=new JTextArea();showArea.setEditable(false);showArea.setLineWrap(true);JSPane=new JScrollPane(showArea);msgText=new JTextField();msgText.setColumns(30);msgText.addActionListener(this);sentBtn=new JButton("发送");sentBtn.addActionListener(this);pane=new JPanel();pane.setLayout(new FlowLayout());pane.add(msgText);pane.add(sentBtn);con.add(JSPane, BorderLayout.CENTER);con.add(pane, BorderLayout.SOUTH);mainJframe.setSize (500 ,400);mainJframe.setVisible (true);mainJframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//创建套接字连接到服务器try{connectToServer=new Socket("localhost",5500);inFromServer=new DataInputStream(connectToServer.getInputStream());outToServer=new DataOutputStream(connectToServer .getOutputStream());showArea.append("连接成功,请说话...\n");//创建线程在后台处理对方的消息thread=new Thread(this);thread.setPriority(Thread.MIN_PRIORITY);thread.start();} catch (UnknownHostException e1){e1.printStackTrace();} catch (IOException e1){showArea.append("抱歉,未能连接到服务器!\n");msgText.setEditable(false);sentBtn.setEnabled(false);}}public static void main(String[] args){new ChatClient();}@Override//public void actionPerformed(ActionEvent e){String s=msgText.getText();if (s.length()>0){try{outToServer.writeUTF(s);outToServer.flush();showArea.append("我(客户端)说: "+msgText. getText()+"\n");} catch (IOException e1){showArea.append("你的消息:“"+msgText.getText()+"”未能发送出去!\n");}}}//本线程负责将服务器传来的消息显示在对话区域public void run(){try{while (true){showArea.append("服务端说:"+inFromServer.readUTF()+"\n");Thread.sleep(1000);}} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}}

编译后首先运行服务端,在运行客户端。截图如下:


【Java】GUI界面聊天小程序(基于Socket的客户端服务端通信)相关推荐

  1. Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序

    Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序 一.项目背景 电影逐渐成为人们生活的不可或缺的一部分,而了解一部电影的可以通过电影评分与大众推荐度,但以上的方式都太过于片面, ...

  2. java 带界面的小程序_JAVA 编写一个带有窗口的应用程序

    展开全部 源代码如下: Tetres_windows.java/** 俄罗斯方块62616964757a686964616fe58685e5aeb931333431366333的窗体*///impor ...

  3. 项目展示--基于UDP传输协议+GUI的Java聊天小程序(图片加源代码)

    前言 前几天没什么事儿,在学习UDP和TCP传输协议,顺手做了一个基于UDP协议的聊天小程序,同时复习了Java的GUI知识. 程序运行截图展示 1.运行程序,生成第一个窗口,输入要监听的端口号:12 ...

  4. javaweb通过iis实现域账号免登陆_聊天小程序的Java实现

    登陆界面 注册账号 找回密码 重设密码 聊天界面 多人聊天 一. 设计任务 1.1设计意义 <Java基础入门>课程设计是对学生的一种全面综合训练,它包括问题分析,用户界面设计,程序设计基 ...

  5. springboot md5加密_实在!基于Springboot和WebScoket,写了一个在线聊天小程序

    基于Springboot和WebScoket写的一个在线聊天小程序 (好几天没有写东西了,也没有去练手了,就看了看这个...) 项目说明 此项目为一个聊天的小demo,采用springboot+web ...

  6. 基于java SSM框架+微信小程序实现电子书城阅读器演示【附项目源码+论文说明】分享

    基于java SSM框架+微信小程序实现电子书城阅读器演示 摘要 而随着互联网技术的不断发展,互联网已经渗入到我们生活中的各个方面.移动设备的普及使我们的生活发生了翻天覆地的变化,这种变化也深刻影响着 ...

  7. 基于java SSM框架+微信小程序实现电子书城阅读器演示【附项目源码+论文说明】

    基于java SSM框架+微信小程序实现电子书城阅读器演示 摘要 而随着互联网技术的不断发展,互联网已经渗入到我们生活中的各个方面.移动设备的普及使我们的生活发生了翻天覆地的变化,这种变化也深刻影响着 ...

  8. Java的网络编程【TCP与UDP聊天小程序】

    Java的网络编程[TCP与UDP聊天小程序] 1. TCP协议 1.1 传输控制协议(Transmission Control Protocol),是一种**面向连接(全程保持连接)**的协议,类似 ...

  9. python socket能做什么_用python写一个聊天小程序!和女朋友的专属聊天工具!

    原标题:用python写一个聊天小程序!和女朋友的专属聊天工具! 1.UDP简介 Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP).UDP为应用程序提供了无需建立就可 ...

最新文章

  1. mysql通过查看跟踪日志跟踪执行的sql语句
  2. 高性能Server---Reactor模型
  3. html5添加到安卓桌面图标,Android向桌面添加快捷方式,使其指向特定的网页
  4. Web开发环境搭建 Eclipse-Java EE 篇
  5. DCMTK:DcmItem类的测试程序
  6. Linux(4) 实用指令
  7. Tomcat一直启动不成功,连接不到8080(持续更新带图解释并总结了其他博文)
  8. matlab中的矩阵元素表示和求和
  9. 常见的颜色搭配、衣裤搭配指南
  10. 自动透视校正为四边形对象
  11. php错误测试,对 PHP 错误进行测试
  12. java线程状态管理
  13. ET、LT、EPOLLONESHOT
  14. 随机森林的特征重要性原理
  15. Java学习_Day 02(学习内容:狂神说JAVA零基础P12-P17)
  16. VMware公司MKS连接Remote Console
  17. 晚上呼吸困难怎么了?
  18. 编写一程序计算到现在为止已经过了多少天,现在的时间是几时几分几秒
  19. 《爱情公寓》剧红角色红 演员总差一点点
  20. 数据可视化神器DATAV

热门文章

  1. 在线涂改图片 php,php网站怎么修改图片
  2. 数独游戏设计(草稿)
  3. 在PPT里制作具有上下标的文字效果
  4. 锂电池生产全过程图解
  5. Android系统签名jks文件
  6. win11 win10更新后 鼠标右键新建文本文档(.txt) 快捷方式消失
  7. 【JAVA】Socket通讯发送报文
  8. 用一个简单的例子说明如何使用S函数进行Simulink建模
  9. 美国硕士计算机专业排名,2021美国硕士计算机专业排名
  10. cad批量打印_CAD批量打印(分图大师)