java 25 - 5 网络编程之多线程实现聊天室
平时聊天都是在同一个窗口的,所以,这个窗口同时实现发送数据和接收数据,这时就需要多线程实现。
建立一个类:
把聊天的发送端和接收端放在同一个类,启动一个窗口
public class CharRoom {
public static void main(String[] args) throws IOException {
//创建socket发送对象和接收对象
DatagramSocket send = new DatagramSocket();
DatagramSocket receive = new DatagramSocket(10010);
//用多线程同时运行2个
SendThread st = new SendThread(send);
ReceiveThread rt = new ReceiveThread(receive);
Thread stThread = new Thread(st);
Thread rtThread = new Thread(rt);
//启动线程
stThread.start();
rtThread.start();
}
再建立发送类:
public class SendThread implements Runnable {
// 构造传参
private DatagramSocket ds;
public SendThread(DatagramSocket ds) {
this.ds = ds;
}
public void run() {
try {
// 键盘输入的内容,进行数据打包
// 创建键盘输入对象,IO流
BufferedReader br = new BufferedReader(new InputStreamReader(
System.in));
// 读取输入的数据
String line = null;
while ((line = br.readLine()) != null) {
// 设定退出条件
if (line.endsWith("886")) {
break;
}
// String转换成byte,打包
byte[] bys = line.getBytes();
// 发送数据
DatagramPacket dp = new DatagramPacket(bys, bys.length,
InetAddress.getByName("172.19.xx.xxx"), 10010);
ds.send(dp);
}
// 释放资源
ds.close();
}
// 处理异常
catch (IOException e) {
e.printStackTrace();
}
}
}
接收端:(要一直启动,所以无需释放资源)
public class ReceiveThread implements Runnable {
// 构造方法接收
private DatagramSocket ds;
public ReceiveThread(DatagramSocket ds) {
this.ds = ds;
}
// 接收数据
public void run() {
try {
// 接收端一直启动
while (true) {
// 创建数据包
byte[] bys = new byte[1000];
DatagramPacket dp = new DatagramPacket(bys, bys.length);
// 接收数据包
ds.receive(dp);
// 解析数据包
String result = new String(dp.getData(), 0, dp.getLength());
// 获取发送端的机器名称
String name = dp.getAddress().getHostName();
// 打印到控制台
System.out.println("从" + name + "发送: " + result);
}
}
// 处理异常
catch (IOException e) {
e.printStackTrace();
}
}
}
根据这些,建立GUI,再加优化,就可以做一个聊天室
java 25 - 5 网络编程之多线程实现聊天室的更多相关文章
- java 25 - 1 网络编程的概述
网络编程概述 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统. ...
- Java 网络编程 -- 基于TCP 实现聊天室 群聊 私聊
分析: 聊天室需要多个客户端和一个服务端. 服务端负责转发消息. 客户端可以发送消息.接收消息. 消息分类: 群聊消息:发送除自己外所有人 私聊消息:只发送@的人 系统消息:根据情况分只发送个人和其他 ...
- java 25 - 2 网络编程之 网络通信三要素
网络通信三要素 IP地址: InetAddress 网络中设备的标识,不易记忆,可用主机名(计算机的标识号) 端口号: 用于标识进程的逻辑地址,不同进程的标识(正在运行的软件的标识号) 传输协议: 通 ...
- 黑马程序员:Java基础总结----网络编程
黑马程序员:Java基础总结 网络编程 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络编程 网络通讯要素 . IP地址 . 网络中设备的标识 . 不易记忆,可用 ...
- 20165324 Java实验五 网络编程与安全
20165324 Java实验五 网络编程与安全 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:何春江 学号:20165324 指导教师:娄嘉鹏 实验日期:2018年5月28日 实 ...
- Java学习:网络编程总结
Java网络编程总结 一.概述 计算机网络是通过传输介质.通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统.网络编程就就是编写程序使联网的两个(或多个)设备( ...
- Java之HTTP网络编程(一):TCP/SSL网页下载
目录 一.简介:HTTP程序设计 1.HTTP系统设计 2.HTTP客户端工作过程 3.HTTP服务端工作过程 二.基于TCP Socket的HTTP网页下载 三.基于SSL Socket的HTTPS ...
- Java学习之网络编程实例
转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一 ...
- Java进阶之网络编程
网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...
随机推荐
- ABAP 一个隐藏 selection-screen block的实例
以下是一个演示如何通过 selection-screen 中的pushbutton来动态改变屏幕上的字段的显示状态的(即显示或者隐藏). 注意:显示 通过本示例可知selection-scr ...
- 使用Aircrack-ng进行无线安全审计
设置监听模式 激活网卡 ifconfig wlan0 up 结束占用网络接口的进程 airmon-ng check kill 开启监听模式 airmon-ng start wlan0 查看网卡是否成功 ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q84-Q87)
Question 84You are designing a Web Part for SharePoint 2010 that must be able to be used on any sit ...
- <转>iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!
原文地址:http://blog.csdn.net/xiaominghimi/article/details/6937097 //——2012-12-11日更新 获取"产品付费数量等于0 ...
- Swift tour
输出函数: print(“hello world!") 无需引入函数库,无须使用“;”作为语句结尾,也无须写跟其它语言一样的main()函数,Swift中,全局区的代码就是程序入口.You ...
- Android Activity生命周期详讲
管理 Activity 生命周期 通过实现回调方法管理 Activity 的生命周期对开发强大而又灵活的应用至关重要. Activity 的生命周期会直接受到 Activity 与其他 Activit ...
- OC中面向对象2
一. 定义OC的类和创建OC的对象 接下来就在OC中模拟现实生活中的情况,创建一辆车出来.首先要有一个车子类,然后再利用车子类创建车子对象 要描述OC中的类稍微麻烦一点,分2大步骤:类的声明.类的实现 ...
- ios必须知道的事情
一. 学前提醒 其实iOS开发就是开发iPhone\iPad上的软件,而要想开发一款软件,首先要学习程序设计语言 iOS开发需要学习的主要程序设计语言有:C语言.C++.Objective-C,其中C ...
- 数据结构--用Objective-C简单实现的数据结构:栈
前言:最近在学习数据结构,这里用Objective-C简单实现了一下栈.用Objective-C确实好容易,因为我使用了Cocoa框架提供了NSMutableArray作为存储元素的集合,操作集合元素 ...
- html的层叠次序---真没有想象的简单
学习资料1: http://www.cnblogs.com/mind/archive/2012/04/01/2198995.html 学习资料2:http://www.cnblogs.com/weib ...