网络Socket编程UDP协议例子
服务端代码
public class UDPChatServer {
//通讯端口
private Integer port=8000;
//数据报文的通讯通道对象
private DatagramChannel channel;
//发送数据的最大大小
private final Integer MAX_SIZE=1024;
private Charset charset=Charset.forName("UTF-8");
public UDPChatServer() throws IOException {
//DatagramChannel本身的open方法返回一个DatagramChannel对象
channel=DatagramChannel.open();
//获取数据报的socket对象UDP 的socket
DatagramSocket socket=channel.socket();
//将socket对象绑定上本地的端口
SocketAddress address=new InetSocketAddress(port);
socket.bind(address);
System.out.println("server started!");
}
private void service(){
//初始化一个新的字节缓存对象容量为MAX_SIZE=1024 个字节。
ByteBuffer receiveBuffer=ByteBuffer.allocate(MAX_SIZE);
while (true){
//将缓存中的数据清空
receiveBuffer.clear();
try {
//从渠道中获取固定大小的数据,获取client连接
InetSocketAddress client= (InetSocketAddress) channel.receive(receiveBuffer);
//客户端每次请求到receiveBuffer里
//设置buffer指针的下标0。这样就可以从buffer开头,对该buffer进行遍历(读取)了
receiveBuffer.flip();
//将字节数据转为字符串
String msg= charset.decode(receiveBuffer).toString();
System.out.println(String.format("new data :%s %s %s ",client.getAddress(),client.getPort(),msg));
//应答client 发送数据到通道中的客户端
channel.send(ByteBuffer.wrap(reply(msg).getBytes(charset)),client);
} catch (IOException e) {
e.printStackTrace();
}
}
}
private String reply(String word){
return "you said :"+word;
}
public static void main(String[] args) throws IOException {
new UDPChatServer().service();
}
}
客户端代码:
public class UDPChatClient {
private Integer port=8000;
private String host="localhost";
//UDP socket
private DatagramSocket socket;
private InetAddress address;
private Charset charset=Charset.forName("UTF-8");
public UDPChatClient() throws IOException {
socket=new DatagramSocket();
//设置服务器的地址
address=InetAddress.getByName(host);
System.out.println("connection ok");
}
public static void main(String[] args) throws IOException {
new UDPChatClient().say();
}
private void say() throws IOException {
BufferedReader localreader=new BufferedReader(new InputStreamReader(System.in));
String word;
while ((word=localreader.readLine())!=null){
// 将string转为byte数组 发送udp包
byte[] data=word.getBytes(charset);
//组装包指定ip和端口的数据包
DatagramPacket outputPacket=new DatagramPacket(data,data.length,address,port);
//发送
socket.send(outputPacket);
//接收udp包放到byte数组中
DatagramPacket inputPacket=new DatagramPacket(new byte[1024],1024);
socket.receive(inputPacket);
//打印获取的数据
System.out.println(new String(inputPacket.getData(),0,inputPacket.getLength(),charset));
//客户端主动关闭
if (word.equals("bye")){
socket.close();
break;
}
}
}
}
网络Socket编程UDP协议例子的更多相关文章
- 网络Socket编程TCP协议例子
1.单线程TCP服务端 public class TcpChatServer { private Integer port=8000; private ServerSocket serverSocke ...
- UDP协议网络Socket编程(java实现C/S通信案例)
我的博客园:https://www.cnblogs.com/chenzhenhong/p/13825286.html 我的CSDN博客:https://blog.csdn.net/Charzous/a ...
- socket之UDP协议,并发编程介绍,操作系统发展史
socket之UDP协议 1.UDP协议 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection 参考 ...
- Java:基于TCP协议网络socket编程(实现C/S通信)
目录 一.前言:TCP原理简介 二.Socket编程通信 三.TCP服务器端(具体代码) 四.TCP客户端(具体代码) 五.通信效果演示 六."创意"机器人:价值一个亿的AI核心代 ...
- java多线程实现TCP网络Socket编程(C/S通信)
目录 开篇必知必会 一.多线程技术 二.实现多线程接收 1.单线程版本 2.多线程版本 三.多线程与进程的关系 四.客户端界面完整代码 五.多线程通信对比 最后 开篇必知必会 在前一篇<Java ...
- 3、网络并发编程--udp代码、操作系统发展史、多道技术、进程理论
昨日内容回顾 socket基本使用 # 内置的模块 import socket s = socket.socket() # 默认是TCP协议 也可以切换为UDP协议 s.bind((ip,port)) ...
- python网络-Socket之udp编程(24)
一.udp简介 udp --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议. udp不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地. udp在 ...
- 网络编程 - UDP协议
UDP协议 服务端 ''' UDP 协议 又称 数据报协议 SOCK_DGRAM ''' from socket import * # 一般不这样做 会重名 但写socket可以这样写 因为要用到太多 ...
- 网络编程——UDP协议和通信
第1章 UDP与TCP协议 在介绍TCP/IP结构时,提到传输层的两个重要的高级协议,分别是UDP和TCP,其中UDP是User Datagram Protocol的简称,称为用户数据报协议,TCP是 ...
随机推荐
- const修饰指针时应注意的问题
1.指向常量的指针 顾名思义,一个指针指向const对象,则称它为指向常量的指针. ; int* ptr=&a; //错误 const int* ptr=&a; //必须用const来 ...
- es6函数的新语法
函数的默认值 function(x,y=10){ //赋予了y就有了默认值为10,如果y赋值了,就回被覆盖,否则就是默认值10 变量已经有默认值了,所以不用再次用let或者const声明啦 }
- [待完善]mycat分布式架构部署
mycat介绍:http://mycat.org.cn/ mycat分布式架构部署
- Jersey RESTful WebService框架学习(六)接收MultivaluedMap类型参数
现在的web开发中有些工程会觉得实体bean的架构会比较重,现在的持久层的框架的特点也层出不穷,核心思想的ORM在此基础上,提供了很多便捷操作,mybatis,jfinal(内部持久层框架)之类的也诞 ...
- Window下同一台服务器部署多个tomcat服务简易教程
第一步:解压两份tomact 分别为tomactserver01和tomactserver02文件夹 第二.配置tomact的环境变量 分别为 第三步:分别修改tomact的bin目录下的catali ...
- 20169207《linux内核原理与分析》第二周作业
第一部分:学习MOOC网Linux内核分析的课程. 首先对冯诺依曼体系结构和存储程序计算机工作模型进行了了解,查阅资料,对冯诺依曼体系的特点与课堂上的相结合,真实明白了模型的特点. 在汇编C语言程序时 ...
- ASP.NET Web API 框架研究 Self Host模式下的消息处理管道
Self Host模式下的ASP.NET Web API与WCF非常相似,都可以寄宿在任意类型的托管应用程序中,宿主可以是Windows Form .WPF.控制台应用以及Windows Servic ...
- RxSwift学习笔记4:disposeBag/scheduler/AnyObserver/Binder
let disposeBg = DisposeBag() //直接在创建 //在 subscribe 方法中创建 let ofObserval = Observable.of("a" ...
- MySQL表名大小写设置
1 简介 在MySQL中,数据库对应数据目录中的目录.数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎).因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小 ...
- AlexNet详解2
此处以caffe官方提供的AlexNet为例. 目录: 1.背景 2.框架介绍 3.步骤详细说明 5.参考文献 背景: AlexNet是在2012年被发表的一个金典之作,并在当年取得了ImageNet ...