【Java】GUI界面聊天小程序(基于Socket的客户端服务端通信)
基于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个基本的步骤。
- 创建Socket
- 打开连接到Socket的输入/输出流。
- 按照一定的协议对Socket进行读写操作。
- 关闭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的客户端服务端通信)相关推荐
- Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序
Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序 一.项目背景 电影逐渐成为人们生活的不可或缺的一部分,而了解一部电影的可以通过电影评分与大众推荐度,但以上的方式都太过于片面, ...
- java 带界面的小程序_JAVA 编写一个带有窗口的应用程序
展开全部 源代码如下: Tetres_windows.java/** 俄罗斯方块62616964757a686964616fe58685e5aeb931333431366333的窗体*///impor ...
- 项目展示--基于UDP传输协议+GUI的Java聊天小程序(图片加源代码)
前言 前几天没什么事儿,在学习UDP和TCP传输协议,顺手做了一个基于UDP协议的聊天小程序,同时复习了Java的GUI知识. 程序运行截图展示 1.运行程序,生成第一个窗口,输入要监听的端口号:12 ...
- javaweb通过iis实现域账号免登陆_聊天小程序的Java实现
登陆界面 注册账号 找回密码 重设密码 聊天界面 多人聊天 一. 设计任务 1.1设计意义 <Java基础入门>课程设计是对学生的一种全面综合训练,它包括问题分析,用户界面设计,程序设计基 ...
- springboot md5加密_实在!基于Springboot和WebScoket,写了一个在线聊天小程序
基于Springboot和WebScoket写的一个在线聊天小程序 (好几天没有写东西了,也没有去练手了,就看了看这个...) 项目说明 此项目为一个聊天的小demo,采用springboot+web ...
- 基于java SSM框架+微信小程序实现电子书城阅读器演示【附项目源码+论文说明】分享
基于java SSM框架+微信小程序实现电子书城阅读器演示 摘要 而随着互联网技术的不断发展,互联网已经渗入到我们生活中的各个方面.移动设备的普及使我们的生活发生了翻天覆地的变化,这种变化也深刻影响着 ...
- 基于java SSM框架+微信小程序实现电子书城阅读器演示【附项目源码+论文说明】
基于java SSM框架+微信小程序实现电子书城阅读器演示 摘要 而随着互联网技术的不断发展,互联网已经渗入到我们生活中的各个方面.移动设备的普及使我们的生活发生了翻天覆地的变化,这种变化也深刻影响着 ...
- Java的网络编程【TCP与UDP聊天小程序】
Java的网络编程[TCP与UDP聊天小程序] 1. TCP协议 1.1 传输控制协议(Transmission Control Protocol),是一种**面向连接(全程保持连接)**的协议,类似 ...
- python socket能做什么_用python写一个聊天小程序!和女朋友的专属聊天工具!
原标题:用python写一个聊天小程序!和女朋友的专属聊天工具! 1.UDP简介 Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP).UDP为应用程序提供了无需建立就可 ...
最新文章
- mysql通过查看跟踪日志跟踪执行的sql语句
- 高性能Server---Reactor模型
- html5添加到安卓桌面图标,Android向桌面添加快捷方式,使其指向特定的网页
- Web开发环境搭建 Eclipse-Java EE 篇
- DCMTK:DcmItem类的测试程序
- Linux(4) 实用指令
- Tomcat一直启动不成功,连接不到8080(持续更新带图解释并总结了其他博文)
- matlab中的矩阵元素表示和求和
- 常见的颜色搭配、衣裤搭配指南
- 自动透视校正为四边形对象
- php错误测试,对 PHP 错误进行测试
- java线程状态管理
- ET、LT、EPOLLONESHOT
- 随机森林的特征重要性原理
- Java学习_Day 02(学习内容:狂神说JAVA零基础P12-P17)
- VMware公司MKS连接Remote Console
- 晚上呼吸困难怎么了?
- 编写一程序计算到现在为止已经过了多少天,现在的时间是几时几分几秒
- 《爱情公寓》剧红角色红 演员总差一点点
- 数据可视化神器DATAV