java-udp编程
TCP/IP UDP都是基于传输层的;而udp发送数据会出现丢包的情况,发送一个数据不管对方接收不接收,发送过去就完事了;
udp的特点:将数据源和目的封装成数据包中,不要建立连接;(DatagramPacket)
每个数据报的大小在限制64K以内
因无连接,是不可靠协议
不需要建立连接,速度快;
下面将编写一代代码展现UDP
一、client 端
public class UDPSocketClient {
public static void main(String[] args) throws Throwable {
//send();
keySend();
}
private static void keySend() throws Throwable {
try {
//1、创建UDP服务
DatagramSocket socket=new DatagramSocket();
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
String message=null;
while((message=reader.readLine())!=null) {
if(message.equals("886"))
break;
//2、 封装数据包
DatagramPacket send=new DatagramPacket(message.getBytes(),message.getBytes().length,InetAddress.getByName("localhost"), 8088);
//阻塞式 3、发送数据
socket.send(send);
}
//4、释放资源
socket.close();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
二、SERVER端
public class UDPSocketServer {
public static void main(String[] args) throws Throwable {
//receive();
Keyreceive();
}
private static void Keyreceive() throws Throwable {
//1、创建udp socket并指定端口
DatagramSocket socket = new DatagramSocket(8088);
while(true) {
//2、定义数据 要接收的报文
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
socket.receive(packet);//阻塞式
String message=new String(packet.getData(),0,packet.getData().length);
System.out.println("Server收到的消息为:"+message);
}
}
}
三、测试结果;
先把server端启动,然后开启client
客户端发送消息

服务端接收消息

多线程进行聊天
一、客户端
public class UDPSocketClientThread implements Runnable{
private DatagramSocket datagramSocket;
public UDPSocketClientThread(DatagramSocket datagramSocket) {
this.datagramSocket=datagramSocket;
}
@Override
public void run() {
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
String message=null;
try {
while((message=reader.readLine())!=null) {
if(message.equals("886"))
break;
//2、发送数据
DatagramPacket send=new DatagramPacket(message.getBytes(),message.getBytes().length,InetAddress.getByName("192.168.43.255"), 8088);
//阻塞式
this.datagramSocket.send(send);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
二、服务端
public class UDPSocketServerThread implements Runnable{
DatagramSocket socket;
public UDPSocketServerThread(DatagramSocket socket) {
this.socket=socket;
}
@Override
public void run() {
while(true) {
//2、定义数据 要接收的报文
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
try {
socket.receive(packet);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//阻塞式
String message=new String(packet.getData(),0,packet.getData().length);
InetAddress inetAddress=null;
try {
inetAddress = InetAddress.getLocalHost();
System.out.println(inetAddress.getHostAddress()+"的消息为:"+message);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
三、测试运行
public class UDPSocketRun {
public static void main(String[] args) throws Throwable {
DatagramSocket send=new DatagramSocket();
DatagramSocket receive=new DatagramSocket(8088);
new Thread(new UDPSocketClientThread(send)).start();
new Thread(new UDPSocketServerThread(receive)).start();
}
}
java-udp编程的更多相关文章
- Java UDP 编程
1.客户端代码 1 import java.io.IOException; 2 import java.net.DatagramPacket; 3 import java.net.DatagramSo ...
- Java UDP网络编程 - 最简单示例
UDP也是网络通讯中的一个重要协议,与TCP区别可参见浅谈TCP/IP 和 UDP的区别,本文就对Java UDP通讯做一个简单例子介绍 服务端: package wyf; import java.i ...
- java 网络编程-tcp/udp
--转自:http://blog.csdn.net/nyzhl/article/details/1705039 直接把代码写在这里,解释看这里吧:http://blog.csdn.net/nyzhl/ ...
- 牛客网Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤
福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 Java全栈大联盟 ...
- Java网络编程UDP通信原理
前言 继续今天我们的Java网络编程--TCP和UDP通信 一.TCP和UDP概述 传输层通常以TCP和UDP协议来控制端点与端点的通信 TCP UDP 协议名称 传输控制协议 用户数据包协议 是 ...
- java socket编程(li)
一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以 ...
- Java 网络编程学习总结
新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1] 网络编程认识 [2] TCP/IP编程 ...
- java socket编程(网络编程)
一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- Java Socket编程
Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...
- Java Socket编程题库
一. 填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...
随机推荐
- Linux-android 模拟器使用
1.把sdcard挂载到一个文件夹 mkdir sdcard sudo mount -o loop sdcard.img sdcard 日志在sdcard下lm-kill文件下查看 注解: http: ...
- Linux文件属性之用户与用户组基础知识回顾
回顾: 用户.用户组的概念: 每个文件和进程,都需要对应一个用户和用户组. linux系统通过UID和GID来识别用户和组的. 用户名相当于人名 UID和GID 身份证号 管理员:root do ...
- Vue:不同页面之间的传递参数--params
在嵌套vue-router情况下,不同页面之间传递参数可以通过params实现.而params传参分为两种情况: 1.参数在url中显示 首先你要确定自己要传的参数,并在控制路由的文件中的Router ...
- Oracle- 数据库知识回顾
数据库知识回顾: sql语句的语法规范: sql语句不区分大小写,习惯上系统的保留字.关键字.函数名称大写,表名和列名小写 使用空格和换行分隔单词效果一样,一般情况下独立的整句不换行,不同的子句需要换 ...
- Jenkins+SVN持续环境搭建
需要三台不同环境的服务器,SVN.Jenkins.Tomcat 1.SVN搭建 1.Subversion服务器(SVN服务器) 2.项目对应的版本库 3.版本库中钩子程序(用于触发构建命令) 在我以前 ...
- php学习历程1——注册、登录(面向过程、面向对象)
首先放一张天空之城 Php入门来的第一个小项目,首先做的是一个简陋的文章管理系统.有登录.注册.文章list.添加文章.修改文章.删除文章.分页这几个小功能. 面向过程的编码 面向对象的编码 首先做的 ...
- Spring实战(六)自动装配的歧义性
1.Spring进行自动装配时碰到的bean歧义性问题. 在进行自动装配时,只有仅有一个bean匹配所需结果时,才是可行的. 如果不仅仅一个bean能够匹配结果,例如一个接口有多个实现,这种歧义性会阻 ...
- 3.Shell的基本功能
3.Shell的基本功能Bash是Bourne-Again Shell的缩写.Bourne Shell的内部命令在Bash中同样适用.3.1 Shell语法3.1.1 Shell操作shell读取和执 ...
- Java Web ActiveMQ与WebService的异同
Webservice 和MQ(MessageQueue)都是解决跨平台通信的常用手段 一.WebService:用来远程调用服务,达到打通系统.服务复用的目的.是SOA系统架构——面向服务架构的体现. ...
- C#中属性的封装
封装的一般性 封装快捷键:Ctrl+R+E 封装的目的: public修饰的属性,不够安全:private修饰的属性,无法使用所以,用到了封装: 封装就是 隐藏对象的信息,但要流出访问的接口 封装代码 ...