网络工程用UDP协议和多线程实现群聊。(用map来存取地址信息)
来源:互联网 发布:js 垃圾回收机制 编辑:程序博客网 时间:2024/06/08 12:33
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Set;
先创建一个服务器端用来存储对话和ip地址信息。用map保证ip不能重复。
public class Server extends Thread {
long l = 2000;
// 定义一个Stringbuffer
static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
DatagramSocket ds;
HashMap<String, InetAddress> al;
static StringBuilder sb = new StringBuilder();
public Server(DatagramSocket ds,HashMap<String, InetAddress> al) {
this.ds = ds;
this.al = al;
}
@Override
public synchronized void run() {
Set<String> ks = al.keySet();
for (String k : ks) {
// 创建一个需要发送的数据包
DatagramPacket ndp = new DatagramPacket(sb.toString().getBytes(),
sb.toString().getBytes().length, al.get(k), ds.getPort());
try {
//向所有用户发送改动的数据包
ds.send(ndp);// Thread.sleep(l);
// l += 1000;
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws Exception {
//创建一个服务器端口。
DatagramSocket ds = new DatagramSocket(8888);HashMap<String, InetAddress> al = new LinkedHashMap<String, InetAddress>();
while (true) {
byte[] b = new byte[102400];
DatagramPacket dp = new DatagramPacket(b, b.length);
ds.receive(dp);
String msg = new String(b);
System.out.println(msg.trim());
InetAddress address = dp.getAddress();
al.put(dp.getAddress().getHostAddress(), dp.getAddress());
// 推送数据给所有ip但不包括自己
sb = new StringBuilder();
sb.append(dp.getAddress().getHostAddress()).append(":")
.append(msg.trim()).append("\t")
.append(sdf.format(new Date())).append("\n");
Server s = new Server(ds,al);
//启动多线程
s.start();}
}
}
//发送端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Client extends Thread {
DatagramSocket ds;
public Client(DatagramSocket ds) {
this.ds = ds;
}
@Override
public void run() {
while (true) {
byte b[] = new byte[102400];
DatagramPacket dp = new DatagramPacket(b, b.length);
try {
ds.receive(dp);
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(new String(b).trim());
}
}
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket(9999);
Client c = new Client(ds);
c.start();
while (true) {
BufferedReader br = new BufferedReader(new InputStreamReader(
System.in));
String msg = br.readLine();
DatagramPacket ndp = new DatagramPacket(msg.getBytes(),
msg.getBytes().length,
InetAddress.getByName("192.168.1.43"), 8888);
ds.send(ndp);
}
}
}
- 网络工程用UDP协议和多线程实现群聊。(用map来存取地址信息)
- 多线程实现UDP协议发送和接收
- JAVA基础再回首(二十八)——网络编程概述、IP地址、端口号、TCP和UDP协议、Socket、UDP传输、多线程UDP聊天
- JAVA基础再回首(二十八)——网络编程概述、IP地址、端口号、TCP和UDP协议、Socket、UDP传输、多线程UDP聊天
- 用UDP实现广播协议
- TCP和UDP协议信息传递
- UDP: 用Socket 实现UDP 协议下的网络通信
- IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
- 用UDP协议实现广播通信
- 用UDP协议实现广播通信
- 用UDP协议实现广播通信
- unity C#中,用BinaryWrite和BinaryReader来存取数据
- Android用SharePreference存取信息
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
- C#用HTTP协议实现多线程文件下载和断点续传
- 多线程UDP传输协议
- UDP 多线程 通讯协议
- 用 Google Map 的 Geocoder 接口来反向地址解析
- 浅析mybatis原理
- 使用options对象进行二次采样
- (矩阵快速幂)hdu5950 Recursive sequence
- hdoj-2005
- 射击课程微信预约-乐享其约
- 网络工程用UDP协议和多线程实现群聊。(用map来存取地址信息)
- sizeof 和 strlen 的区别
- 用UDP写的群聊程序
- CMakeList配置之编译多个.cpp文件
- COOKIE和SESSION有什么区别?
- 面试题5:从尾到头打印链表
- java 泛型的一些理解
- 开源大数据分析工具!
- [NOIP提高组2000]方格取数