当前位置:网站首页>UDP多线程实现聊天
UDP多线程实现聊天
2022-08-09 14:51:00 【左+右】
UDP多线程实现学生教师聊天
学生类
package com.zy.UdpThreadChat;
public class Student {
public static void main(String[] args) throws Exception {
new Thread(new StudentSend(7777,"localhost",9999)).start();
new Thread(new StudentRecevice(8888,"老师")).start();
}
}
学生发送:
package com.zy.UdpThreadChat;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
public class StudentSend implements Runnable{
DatagramSocket socket = null;
BufferedReader reader = null;
private int formPort ;//发送端的端口
private String toIp ;//接收端的地址
private int toPort ;//接收端的端口
public StudentSend(int formPort, String toIp, int toPort) {
this.formPort = formPort;
this.toIp = toIp;
this.toPort = toPort;
try {
//创建自己的端口
socket = new DatagramSocket(formPort);
//获取键盘输入的内容
reader = new BufferedReader(new InputStreamReader(System.in));
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while (true)
{
try {
String data = reader.readLine();
DatagramPacket packet = new DatagramPacket(data.getBytes(), 0, data.getBytes().length,new InetSocketAddress(this.toIp,this.toPort));
socket.send(packet);
if(data.equals("bye"))
{
break;
}
}catch (Exception e){
e.printStackTrace();
}
}
socket.close();
}
}
学生接收:
package com.zy.UdpThreadChat;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class StudentRecevice implements Runnable{
DatagramSocket socket = null;
private int port;//本身端口
private String name;//接收到的信息的发送人
public StudentRecevice(int port, String name) throws SocketException {
this.port = port;
this.name = name;
//创建自己的端口
socket = new DatagramSocket(port);
}
@Override
public void run() {
while (true)
{
try {
//准备接收包裹
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length);
socket.receive(packet);
//接收后
byte[] bytes1 = packet.getData();
String data = new String(bytes1,0,bytes1.length);
System.out.println(this.name+":"+data);
//断开连接条件 bye
if(data.equals("bye"))
{
break;
}
}catch (Exception e){
e.printStackTrace();
}
}
socket.close();
}
}
老师类
package com.zy.UdpThreadChat;
public class Teacher {
public static void main(String[] args) throws Exception {
new Thread(new TeacherSend(8989,"localhost",8888)).start();
new Thread(new TeacherRecevice(9999,"学生")).start();
}
}
老师发送:
package com.zy.UdpThreadChat;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
public class TeacherSend implements Runnable{
DatagramSocket socket = null;
BufferedReader reader = null;
private int formPort ;//发送端的端口
private String toIp ;//接收端的地址
private int toPort ;//接收端的端口
public TeacherSend(int formPort, String toIp, int toPort) {
this.formPort = formPort;
this.toIp = toIp;
this.toPort = toPort;
try {
//创建自己的端口
socket = new DatagramSocket(formPort);
//获取键盘输入的内容
reader = new BufferedReader(new InputStreamReader(System.in));
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while (true)
{
try {
String data = reader.readLine();
DatagramPacket packet = new DatagramPacket(data.getBytes(), 0, data.getBytes().length,new InetSocketAddress(this.toIp,this.toPort));
socket.send(packet);
if(data.equals("bye"))
{
break;
}
}catch (Exception e){
e.printStackTrace();
}
}
socket.close();
}
}
老师接收:
package com.zy.UdpThreadChat;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class TeacherRecevice implements Runnable{
DatagramSocket socket = null;
private int port;//本身端口
private String name;//接收到的信息的发送人
public TeacherRecevice(int port, String name) throws SocketException {
this.port = port;
this.name = name;
//创建自己的端口
socket = new DatagramSocket(port);
}
@Override
public void run() {
while (true)
{
try {
//准备接收包裹
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length);
socket.receive(packet);
//接收后
byte[] bytes1 = packet.getData();
String data = new String(bytes1,0,bytes1.length);
System.out.println(this.name+":"+data);
//断开连接条件 bye
if(data.equals("bye"))
{
break;
}
}catch (Exception e){
e.printStackTrace();
}
}
socket.close();
}
}
边栏推荐
- [Database] How does Sqlserver backup the database regularly and clear it regularly
- [LeetCode] 485.最大连续 1 的个数
- 约束性统计星号‘*’
- FilenameFilter过滤文件名
- 经典面试题 之 TCP 三次握手/ 四次挥手
- 正则表达式实战:最新豆瓣top250爬虫超详细教程
- C语言程序设计笔记(浙大翁恺版) 第六周:数据类型
- Docker安装Redis详细步骤
- OpenSSF's open source software risk assessment tool: Scorecards
- C语言程序设计笔记(浙大翁恺版) 第七章:函数
猜你喜欢

经典面试题 之 JVM调优

MySQL principle and optimization: Limit the query optimization
![[DevOps] jekins configuration (2)](/img/d3/a6774cb8a1f99adf572653be0e581e.png)
[DevOps] jekins configuration (2)

Docker安装MySQL详细步骤

DBCO-PEG-DSPE, Phospholipid-Polyethylene Glycol-Dibenzocyclooctyne, Reaction Without Copper Ion Catalysis

【原神】手机版原神下错版本不能登录怎么办?B服修改为官服

优化软件测试成本的 7 个步骤

一种基于视频帧差异视频卡顿检测方案

6大论坛,30+技术干货议题,2022首届阿里巴巴开源开放周来了!

代码随想录笔记_动态规划_377组合总和IV
随机推荐
EasyExcel的应用
如何设计一个高并发系统?
基于FPGA的FIR滤波器的实现(2)—采用kaiserord & fir2 & firpm函数设计
Similar image detection method
听书项目总结
二维数组实现八皇后问题
C语言程序设计笔记(浙大翁恺版) 第四周:循环
docker安装seata(指定配置文件、数据库、容器数据卷等)
After reading the "Redis In-depth Notes" compiled by Tencent bosses in 90 days, I worshipped on the spot.
My MySQL database was attacked and deleted for ransom, forcing me to use all my might to recover data
爬虫处理乱码问题
相似图像的检测方法
物联网技术概论:1~7章汇总(西安交通大学)
6大论坛,30+技术干货议题,2022首届阿里巴巴开源开放周来了!
VMWare不使用简易安装,手动安装ISO操作手册
技术分享 | 接口自动化测试如何处理 Header cookie
C语言程序设计笔记(浙大翁恺版) 第八周:数组
基于FPGA的FIR滤波器的实现(3)—采用Filter Design & Analysis设计
DMPE-PEG-Mal Maleimide-PEG-DMPE 二肉豆蔻酰磷脂酰乙醇胺-聚乙二醇-马来酰亚胺
【软考】2022年上半年软考过啦