Java基础知识强化之网络编程笔记05:UDP之多线程实现聊天室案例

1. 通过多线程改进刚才的聊天程序,这样我就可以实现在一个窗口发送和接收数据了

2.  代码示例:

(1)SendThread.java,如下:

 1 package com.himi.udpDemo2;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStreamReader;
 6 import java.net.DatagramPacket;
 7 import java.net.DatagramSocket;
 8 import java.net.InetAddress;
 9 
10 public class SendThread implements Runnable {
11 
12     private DatagramSocket ds;
13 
14     public SendThread(DatagramSocket ds) {
15         this.ds = ds;
16     }
17 
18     public void run() {
19         try {
20             // 封装键盘录入数据
21             BufferedReader br = new BufferedReader(new InputStreamReader(
22                     System.in));
23             String line = null;
24             while ((line = br.readLine()) != null) {
25                 if ("886".equals(line)) {
26                     break;
27                 }
28 
29                 // 创建数据并打包
30                 byte[] bys = line.getBytes();
31                 // DatagramPacket dp = new DatagramPacket(bys, bys.length,
32                 // InetAddress.getByName("192.168.12.92"), 12345);
33                 DatagramPacket dp = new DatagramPacket(bys, bys.length,
34                         InetAddress.getByName("49.123.72.145"), 12306);
35 
36                 // 发送数据
37                 ds.send(dp);
38             }
39 
40             // 释放资源
41             ds.close();
42         } catch (IOException e) {
43             e.printStackTrace();
44         }
45     }
46 
47 }

 

(2)ReceiveThread.java,如下:

 1 package com.himi.udpDemo2;
 2 
 3 import java.io.IOException;
 4 import java.net.DatagramPacket;
 5 import java.net.DatagramSocket;
 6 
 7 public class ReceiveThread implements Runnable {
 8     private DatagramSocket ds;
 9 
10     public ReceiveThread(DatagramSocket ds) {
11         this.ds = ds;
12     }
13 
14     public void run() {
15         try {
16             while (true) {
17                 // 创建一个包裹
18                 byte[] bys = new byte[1024];
19                 DatagramPacket dp = new DatagramPacket(bys, bys.length);
20 
21                 // 接收数据
22                 ds.receive(dp);
23 
24                 // 解析数据
25                 String ip = dp.getAddress().getHostAddress();
26                 String s = new String(dp.getData(), 0, dp.getLength());
27                 System.out.println("from " + ip + " data is : " + s);
28             }
29         } catch (IOException e) {
30             e.printStackTrace();
31         }
32     }
33 
34 }

 

(3)聊天室程序CharRoom.java,调用上面两个线程工具类,代码如下:

 1 package com.himi.udpDemo2;
 2 
 3 import java.io.IOException;
 4 import java.net.DatagramSocket;
 5 
 6 /*
 7  * 通过多线程改进刚才的聊天程序,这样我就可以实现在一个窗口发送和接收数据了
 8  */
 9 public class ChatRoom {
10     public static void main(String[] args) throws IOException {
11         DatagramSocket dsSend = new DatagramSocket();
12         DatagramSocket dsReceive = new DatagramSocket(12306);
13 
14         SendThread st = new SendThread(dsSend);
15         ReceiveThread rt = new ReceiveThread(dsReceive);
16 
17         Thread t1 = new Thread(st);
18         Thread t2 = new Thread(rt);
19 
20         t1.start();
21         t2.start();
22     }
23 }

运行效果如下:

转载于:https://www.cnblogs.com/hebao0514/p/4859593.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言选择法排序案例,谁能给我一个c语言选择排序法的简单例子

满意答案evil83752014.02.27采纳率:51% 等级:11已帮助:7590人#include int main(){int array[100], n, c, d, position, swap;printf("Enter number of elements\n");scanf("%d", &n);printf("Enter %d inte…

小球进盒子C语言,N个小球放进M个盒子算法-Go语言中文社区

N个小球放入M个盒子共有多少种方法,并输出的算法设计:算法思路1 :暴力填充盒子每个小球都可能放入M个盒子的任意一个,所以直接根据小球个数做递归即可,然后将存储放入hash中排重//TODO算法思路2 :递归填充盒子即&#…

r语言c5.0要求因子输出,R语言中因子的创建与使用

原标题:R语言中因子的创建与使用因子在R语言中可以用来表示名义型变量或有序变量。名义变量一般表示类别,如性别,种族等等。有序变量是有一定排序顺序的变量,如职称,年级等等。在R语言中,名义变量和有序变量…

WinForm中使用AnyCAD三维控件 の 初始化

在WinForm中可以方便的集成AnyCAD.Net三维控件,只需要以下几部即可完成。 一、添加DLL程序集 AnyCAD.Foundation.Net.dll AnyCAD.Presentation.Net.dll AnyCAD.Exchange.Net.dll 二、初始化控件 1.首先创建一个窗体 2.在窗体上放置一个Panel用来放置三维控件 3.初始…

android l usb调试,你居然还不会手机usb调试?5个方法,让你轻松学会设置!

原标题:你居然还不会手机usb调试?5个方法,让你轻松学会设置!最近有位朋友将手机连接电脑的时候,遇到了提示打开手机的USB调试模式,却不知道怎么操作。其实,不同手机的usb调试打开的方式都会有所…

鸿蒙os芯片,没有了芯片,华为能靠鸿蒙OS系统打出差异化吗?

原标题:没有了芯片,华为能靠鸿蒙OS系统打出差异化吗?华为今天要和大家说的手机产品是华为,在目前的市场中,华为手机的影响力是非常大的,并且获得了十分不错的销量,甚至在最近一段时间销量超过三…

html5 canvas 不兼容safari浏览器_HTML5简介

HTML5 是继 HTML4.01 和 XHTML1.0 之后的超文本标记语言的最新版本。它是由一群自由思想者组成的团队设计出来,并最终实现多媒体支持、交互性、更加智能的表单,以及更好的语义化标记。HTML5 并不仅仅是 HTML 规范的最新版本,而是一系列用来制…

html5置顶标签css样式,html5 header标签 html header css布局教程 /header

在HTML5版本之前习惯使用div标签布局网页,在HTML5在DIV标签基础上新增header标签元素。也叫“”头部标签。以前我们在div css布局中常常把网页大致分为头部、内容、底部。对于大结构我们常常使用div里加id进行布局。而头部常常使用正应为大家公认html布局中对“head…

第八届育才杯机器人比赛_赛场、名单公布!南海区第八届“献血者杯”羽毛球公开赛“羽”你相约本周六...

主办单位:南海区献血办、南海血站协办单位:南海区羽毛球协会为进一步扩大无偿献血宣传,感恩南海区献血者,活跃无偿献血者的文体生活,打造一个南海区无偿献血者交流的平台,共同营造“运动、健康、献血、快乐…

2021届安徽高考成绩查询,安徽2021年高考成绩什么时候公布

据安徽省教育招生考试院透露,安徽预计将于6月23日公布各批次录取分数线、考生成绩。2021年安徽高考成绩查询入口2021年高考录取方法1、普通高校的招生录取工作在教育部和省高校招生委员会的领导下,由省考试院组织实施。2、省高校招生委员会根据当年高校在…

BroadcastReceiver 广播机制详解

BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。 在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能…

会话管理 轻量php框架_SpringSecurity+JWT权限管理训练营-1基于RBAC模型的权限管理系统...

1.什么是权限管理系统?权限管理是一个几乎所有后台系统的都会涉及的一个重要组成部分,可以说是后台项目的基本功,主要目的是对整个后台管理系统进行权限的控制,而针对的对象是员工,避免因权限控制缺失或操作不当引发的…

2021宣城职业技术学院对口高考成绩查询,2021年宣城职业技术学院高考录取通知书查询 通知书什么时候可以收到...

高考志愿填报后最重要的一件事情就是高考录取通知书的查收了,因为录取通知书才是证明你被录取的有效方式。那么很多考生及家长最关心怎么查询宣城职业技术学院录取通知书?宣城职业技术学院录取通知书寄到哪里了?本文大风车网小编为你整理了关…

iOS 谓词的使用

OC中的谓词操作是针对于数组类型的,他就好比数据库中的查询操作,数据源就是数组,这样的好处是我们不需要编写很多代码就可以去操作数组,同时也起到过滤的作用,我们可以编写简单的谓词语句,就可以从数组中过…

multisim秒信号发生器_失联50年的卫星突然出现,莫名向地球发送信号,究竟谁在操控?...

大不列颠无线电学会(RSGB)接到英国康沃尔郡的业余无线电天文爱好者菲尔威廉姆斯(无线电呼叫代号:G3YPQ)的报告,他在2012年12月18日的一次惯例搜索轨道卫星信号的任务中突然搜到了一个237MHZ,每隔4秒重复一次的信号,很明显这是一个…

html 百度地图显示轨迹,百度地图,地图轨迹

百度地图,记录行动轨迹:效果图:上代码:body,html,#allmap {width: 100%;height: 100%;overflow: hidden;margin: 0;font-family: "微软雅黑";}单个标注点沿直线的轨迹运动// 百度地图API功能var map new BMap.Map(&quo…

win10微软图标点击无反应_win10开始菜单,不出来,任务栏右击无反应

使用【win】【R】快捷键打开系统的【运行】;输入【powershell】,按下【确定】运行,然后复制一行命令,点击回车键运行等待命令运行完成之后就可以了。以下是详细介绍:1、在键盘上按下【win】【R】键,使用快捷…

计算机仿真在哪学,计算机仿真软件有哪些

虚拟机,如VMWARE,Virtual PC虚拟机软件可以在一台电脑上模拟出来若干台PC,每台PC可以运行单独的操作系统而互不干扰,可以实现一台电脑“同时”运行几个操作系统,还可以将这几个操作系统连成一个网络。使用虚拟机的好处…

WebApp的前端所遇问题

2015年10月1日至10月25日,两个本科生和一位研究生以及一位老师组成四人团队,开发某教育前端项目 所遇问题总结以及分享: 一、主要应用软件:sublime_text HBuilder 初学者可以在JQuery mobile的Demo中寻找代码(可以看图…

框架的特性_Go 语言 Web 框架 Echo 系列:基础篇—通过一个例子串联各特性

通过前面的介绍,相信对 echo 有了一个初步的认识。本文我们通过一个简单的登录页面来串联 echo 的相关特性。因为该文主要关注各个特性,所以在目录结构和代码组织方面很随意。本节最终效果1)登录页面2)登录失败3)登录成功main 函数骨架使用 echo 框架&am…