java 25 - 5 网络编程之多线程实现聊天室

平时聊天都是在同一个窗口的,所以,这个窗口同时实现发送数据和接收数据,这时就需要多线程实现。

建立一个类:

  把聊天的发送端和接收端放在同一个类,启动一个窗口

 1 public class CharRoom {
 2
 3     public static void main(String[] args) throws IOException {
 4
 5             //创建socket发送对象和接收对象
 6         DatagramSocket send = new DatagramSocket();
 7         DatagramSocket receive = new DatagramSocket(10010);
 8
 9         //用多线程同时运行2个
10         SendThread st = new SendThread(send);
11         ReceiveThread rt = new ReceiveThread(receive);
12
13         Thread stThread = new Thread(st);
14         Thread rtThread = new Thread(rt);
15
16         //启动线程
17         stThread.start();
18         rtThread.start();
19
20
21     }

再建立发送类:

  

 1 public class SendThread implements Runnable {
 2
 3     // 构造传参
 4     private DatagramSocket ds;
 5
 6     public SendThread(DatagramSocket ds) {
 7         this.ds = ds;
 8     }
 9
10     public void run() {
11
12         try {
13
14             // 键盘输入的内容,进行数据打包
15             // 创建键盘输入对象,IO流
16             BufferedReader br = new BufferedReader(new InputStreamReader(
17                     System.in));
18             // 读取输入的数据
19             String line = null;
20             while ((line = br.readLine()) != null) {
21                 // 设定退出条件
22                 if (line.endsWith("886")) {
23                     break;
24                 }
25
26                 // String转换成byte,打包
27                 byte[] bys = line.getBytes();
28                 // 发送数据
29                 DatagramPacket dp = new DatagramPacket(bys, bys.length,
30                         InetAddress.getByName("172.19.xx.xxx"), 10010);
31
32                 ds.send(dp);
33
34             }
35                 // 释放资源
36                 ds.close();
37
38         }
39             // 处理异常
40             catch (IOException e) {
41                 e.printStackTrace();
42             }
43     }
44 }

接收端:(要一直启动,所以无需释放资源)

 1 public class ReceiveThread implements Runnable {
 2
 3     // 构造方法接收
 4     private DatagramSocket ds;
 5
 6     public ReceiveThread(DatagramSocket ds) {
 7         this.ds = ds;
 8     }
 9
10     // 接收数据
11     public void run() {
12
13         try {
14             // 接收端一直启动
15             while (true) {
16                 // 创建数据包
17                 byte[] bys = new byte[1000];
18                 DatagramPacket dp = new DatagramPacket(bys, bys.length);
19
20                 // 接收数据包
21                 ds.receive(dp);
22
23                 // 解析数据包
24                 String result = new String(dp.getData(), 0, dp.getLength());
25                 // 获取发送端的机器名称
26                 String name = dp.getAddress().getHostName();
27
28                 // 打印到控制台
29                 System.out.println("从" + name + "发送: " + result);
30             }
31         }
32         // 处理异常
33         catch (IOException e) {
34             e.printStackTrace();
35         }
36
37     }
38 }

根据这些,建立GUI,再加优化,就可以做一个聊天室

时间: 2025-01-08 01:14:36

java 25 - 5 网络编程之多线程实现聊天室的相关文章

java 25 - 2 网络编程之 网络通信三要素

网络通信三要素 IP地址: InetAddress 网络中设备的标识,不易记忆,可用主机名(计算机的标识号) 端口号: 用于标识进程的逻辑地址,不同进程的标识(正在运行的软件的标识号) 传输协议: 通讯的规则 常见协议:TCP,UDP 例子: 平时我们要进行通讯,需要哪些要素呢? 比如说:我要跟你说话. 第一个条件: 我要先找到你 (IP) 第二个条件: 你得有接收数据的地方 耳朵 (端口) 第三个条件: 我跟你说话,你能接收到,咱按什么方式接收啊,我说英文你懂吗,说韩文你懂吗,不懂是吧,所以我

Java学习之网络编程实例

转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码

黑马程序员————java中的网络编程

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- java中的网络编程 一.网络编程概述:基于互联网的编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换. 二.网络模型:OSI和TCP/IP 1.OSI(Open System Interconnection开放系统互连

第62节:探索Java中的网络编程技术

前言 感谢! 承蒙关照~ 探索Java中的网络编程技术 网络编程就是io技术和网络技术的结合,网络模型的定义,只要共用网络模型就可以两者连接.网络模型参考. 一座塔有七层,我们需要闯关. 第一层物理层->第二层数据链路层->第三层网络层->第四层传输层->第五层会话层->第六层表示层->第七层应用层. 物理层是主要定义物理设备标准,数据链路层是主要讲从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装.这层的数据较帧. 网络层是将从下层接收到的数据进行IP地址的

Java中的网络编程-2

Socket编程:(一般的网络编程) <1> 两个 JAVA 应用程序可通过一个双向的网络通信连接, 实现数据交换, 这个双向链路的一段称为一个 Socket. <2> Socket 通常用来实现 Client-Server 连接. <3> java.net 包中定义的两个类 Socket 和 ServerSocket(阻塞式), 分别用来实现双向连接的 Client 和 Server 端. <4> 建立连接时, 所需的寻址信息为远程计算机的 IP 地址和端

重踏学习Java路上_Day26(网络编程)

1:网络编程(理解)    (1)网络编程:用Java语言实现计算机间数据的信息传递和资源共享    (2)网络编程模型    (3)网络编程的三要素        A:IP地址            a:点分十进制            b:IP地址的组成            c:IP地址的分类            d:dos命令            e:InetAddress        B:端口            是应用程序的标识.范围:0-65535.其中0-1024不建议使

Java中的网络编程

Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的 C/S程序应用:客户/服务器模式,如QQ客户端,客户端连到服务器上,一个C/S模式的应用必须有两套程序,一个是客户端的程序,一个是服务器程序. B/S程序应用:浏览器/服务器模式,如当下的各种网站都是B/S模式,所有的程序代码都在服务器上,用户通过浏览器去访问. C/S程序分为两种: 基于TCP协议:Socket(套接字), 可靠的编程: A->B

Java笔记(9)-网络编程

不必说碧绿的菜畦,光滑的石井栏,高大的皂荚树,紫红的桑葚:也不必说鸣蝉在树叶里长吟,肥胖的黄蜂伏在菜花上,轻捷的叫天子(云雀)忽然从草间直窜向云霄里去了. 鲁迅 -–<从百草味到三味书屋> ---- [TOC] Java网络编程 URL 类 URL统一资源定位符 一个URL对象通常包含最基本的3部分信息:协议,地址,资源. 示例 用字节流读取流输入流中的数据时,由于汉字是两个字节,如果读取的长度不合适,就会有乱码,可以指定编码格式解决,增加一次读取的数据也可以解决, 用字符流也可以 中文乱码问

Java学习:网络编程

网络编程 1.1 网络编程基础知识 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机.而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的. 两类传输协议:tcp和udp TCP是T