import java.io.IOException; import java.net.*; import java.util.Date; import java.util.LinkedList; import java.util.List; /** * User: yfzhangbin * Date: 13-7-23 * Time: 下午12:47 */ public class UDPServer { public static final int SERVER_PORT = 20202; private static final int BUFFER_SIZE = 1024; private static final List<InetSocketAddress> clientAddressList = new LinkedList<InetSocketAddress>(); static { clientAddressList.add(new InetSocketAddress("localhost", 9001)); clientAddressList.add(new InetSocketAddress("localhost", 9002)); clientAddressList.add(new InetSocketAddress("localhost", 9003)); } public static void main(String[] args) { System.out.println("服务器已经启动,监听端口:"+SERVER_PORT); try { DatagramSocket ds = new DatagramSocket(SERVER_PORT); while (true) { // 从客户端接收到的内容,即客户端的请求 DatagramPacket dp = new DatagramPacket(new byte[BUFFER_SIZE], BUFFER_SIZE); ds.receive(dp); String msg = new String(dp.getData(), 0, dp.getLength()); System.out.println("收到客户端消息:" + msg); if ("shutdown server".equals(msg)) { System.out.println("服务器已经被关闭!"); break; } sendToClients(msg, dp.getSocketAddress()); } ds.close(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 服务器端向客户端群发消息 * @param msg 消息 * @throws IOException */ private static void sendToClients(String msg, SocketAddress fromAddress) throws IOException { DatagramSocket ds = new DatagramSocket(); byte[] bytes = (msg+", 经服务器转发,服务器时间 "+new Date()).getBytes(); for (InetSocketAddress clientAddress : clientAddressList) { // todo 判断如果是发送者,可以跳过消息转发,根据ip地址判断 ds.send(new DatagramPacket(bytes, bytes.length, clientAddress)); } ds.close(); } }
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.*; /** * User: yfzhangbin * Date: 13-7-23 * Time: 下午1:14 */ public class UDPClient { private static final int BUFFER_SIZE = 1024; private static final String SERVER_IP = "localhost"; // todo Change Run 为客户端的监听端口,取值9001,9002,9003 private static int clientListenPort = 9003; public static void main(String[] args) { new Thread(new ReceiveMsgThread(clientListenPort)).start(); try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(true) { String msg = br.readLine(); if ("shutdown".equals(msg)) { System.out.println("客户端已退出!"); System.exit(-1); } sendToServer(msg); } } catch (IOException e) { e.printStackTrace(); } } /** * 客户端向服务端发送消息 * @param msg * @throws IOException */ private static void sendToServer(String msg) throws IOException { DatagramSocket ds = new DatagramSocket(); byte[] bytes = msg.getBytes(); ds.send(new DatagramPacket(bytes, bytes.length, new InetSocketAddress(SERVER_IP, UDPServer.SERVER_PORT))); ds.close(); } /** * 用来监听服务器端发送的信息 */ private static class ReceiveMsgThread implements Runnable { private int listenPort; private ReceiveMsgThread(int listenPort) { this.listenPort = listenPort; } @Override public void run() { System.out.println("客户端已经启动,监听端口:"+clientListenPort); try { DatagramSocket ds = new DatagramSocket(listenPort); while (true) { DatagramPacket recv = new DatagramPacket(new byte[BUFFER_SIZE], BUFFER_SIZE); ds.receive(recv); System.out.println("收到:" + new String(recv.getData(), 0, recv.getLength())); } } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } }
相关推荐
java环境下的基于UDP协议的聊天程序,udp协议聊天程序 具体功能: 1、实现多客户端之间的群聊功能; 2、客户端、服务器端均能显示在线用户列表; 3、服务器负责转发聊天消息;
linux下运行客户端 和服务端后,在服务端可以设置字符串转化模式,根据相应模式将客户端发来的字符串进行转化,并转发回客户端。
实现一个基于UDP的聊天程序。具体功能: (1)能实现多客户端之间的群聊功能; (2)客户端的聊天记录可以存储在文件或数据库中; (3)客户端、服务器端均能显示在线用户列表; (4)客户可以查看以往聊天记录; ...
使用UPD通信,支持广播和单播,服务器进行数据的转发,支持多线程
开发工具使用的是VS2017,基于UDP协议实现的一个简单聊天室功能,包括客户端和服务器端,首先运行服务器端,接着调试->启动新实例开启多个客户端,每开启一个客户端,服务器端会显示XXX连接等提示。客户端发送消息给...
服务器:多线程处理通信数据,基于TCP协议转发聊天数据流,基于UDP协议收发注册登录数据包。 客户端:登录注册基于UDP协议实现与服务器的数据通信,聊天室基于TCP协议实现连接与信息收发。 安装教程 云服务器端...
服务端发送给客户端,服务端有一串字符串,按照分隔符将其分割,并存入json,发给客户端,然后输出。
0积分福利!rtsp转发服务器,基于epoll的ET模式,支持H264,H265,支持TCP和UDP,此文件为个人所写的测试demo,仅作为参考使用。
QUIC (Quick UDP Internet Connections)是 chromium 的一个项目,这是一个体验的协议,旨在降低基于 TCP 通讯的 Web 延迟。QUIC 非常类似 TCP TLS SPDY ,但是基于 UDP 实现的。因为 TCP 是由操作系统内核或者是 ...
在目前的程序设计下客户端已经能够获取peer端的ip,只要指定双方通信的端口号即可实现,基于udp的聊天. 2.实现用户与用户之间的文件传输,目前拟定采用tcp通信,确保文件传输的可靠性. ///////////////////////版权...
在linux下实现UDP组播聊天室,是聊天室的服务器端,作用是存储与转发
公司项目有时要测试TCP/UDP连接测试的服务,为了方便外网(一台有固定域名和ip的WEB服务器)连接本地服务器——客户端在web服务器,服务端在本地(通过路由转发到指定端口),写了此版基于Struts1.2 的Socket(套接字...
nodejs-httpp-在基于UDP的传输上运行...利用多核CPU支持高性能多进程/多线程UDP服务器 可配置的拥塞控制 每插槽网络性能监视器 透明地扩展客户端/中央服务器样式的Web服务 易于使用的API,可重用现有的http / web和node
服务器:采用多线程以及线程锁处理客户端的所有请求以及信息转发任务。服务端实时显示客户的登录与登出信息;保存客户上传的共享文件(网盘功能);保存客户的账号密码信息,记录在线用户。 客户端:打开时可选择...
再运行多个客户端,客户端可以设置自己的昵称,服务器不参与聊天,只用于转发客户端的信息,相当于群聊。代码比较简单,运行之后界面也比较简洁,可以在此基础上添加功能。可以修改代码中的IP地址为本机的IP地址,...
网络代理Netproxy是基于.NET Core的简单ipv6 / ipv4 UDP和TCP代理。 它应该为任何在.net Core 1.1兼容平台上构建并运行,并已在win10-x64和ubuntu.16.10-x64上进行了测试。为什么? 我们需要一个简单的,跨平台IPV6...
4、熟练掌握基于UDP协议的Socket编程; 5、了解Socket编程的协议约定以及信息交互方法; 本程序客户端主要完成了: 1. 客户端发送信息可以广播客户。 2. 广播客户,则将信息转发到所有客户端。 服务器主要完成了: ...
客户端-服务器架构:采用客户端-服务器模式,其中服务器负责接收、处理和转发消息,而客户端负责发送和接收消息,并提供用户界面。 多线程支持:服务器端和客户端都需要支持多线程,以处理多个客户端的并发连接和...
单通道LoRa UDP数据包转发器非常适合开发或测试目的。 只能接收LoRa数据并将其上传到一台或多台服务器。 这个项目非常适合DIY,这是最便宜的LoRa“网关”之一,它由单板计算机和一个4美元的LoRa模块组成。 该项目...