Java 初学UDP传输
不谈理论,先举简单例子。
发送端代码:
public class UDPDemo {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket();
String str = "hello";
DatagramPacket dp = new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("127.0.0.1"),8888);
ds.send(dp);
ds.close();
}
}
接收端代码:
public class UDPDemo2 {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket(8888);
DatagramPacket dp = new DatagramPacket(new byte[1024],1024);
ds.receive(dp);
int len = dp.getLength();
System.out.println(new String(dp.getData(),0,len));
}
}
运行结果:

UDP传输在笔者看来就是个”送快递”的过程,DatagramSocket看作一个快递站点,DatagramPacket看作是快递的货箱,需要传输的byte数组是我们要寄出的包裹。
这样设定好后我们来看发送端代码:
new DatagramSocket()就是随便找到一个快递站点,当然也可以指定站点(比如往里写端口号),str.getBytes()是我们要送的包裹,同时要知道包裹的体积或重量(str的长度)以及接收人和目的地(InetAddress与port),放入了快递货箱DatagramPacket里, send方法开始送货。
再看接收端代码:
同样是一个快递站点,但这个站点必须要指定了,也就是不可用new DatagramSocket()随便找站点,我们指定了8888端口号。DatagramPacket为一个给定容量的货箱(比如1024个字节),用receive方法开始接收。测试时先运行接收端,再运行发送端。这样就实现了UDP的简单传输。
(ps:需要注意的是像发送端代码写的str.length(),只适合发英文,改成str.getBytes().length最好)
基于以上代码,我们可以做个简单聊天界面:

代码如下:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.*;
import java.util.Calendar;
import javax.swing.*;
public class UDPDemo {
private static JTextArea view;
private static JTextArea sendTA;
private static JButton sendB;
private static Box northBox;
private static JFrame jf;
private Box southBox;
private JTextField jtf;
private DatagramSocket ds;
private DatagramSocket dsr;
public static void main(String[] args) throws Exception {
new UDPDemo();
}
UDPDemo() throws Exception{
initialJFrame();
initialNorthBox();
initialSouthBox();
ds = new DatagramSocket();
dsr = new DatagramSocket(8888);
receive();
jf.add(northBox);
jf.add(southBox,BorderLayout.SOUTH);
jf.setVisible(true);
}
private void initialSouthBox() {
southBox = Box.createHorizontalBox();
jtf = new JTextField("");
sendB = new JButton("发送");
sendB.addActionListener(new sendBActionListener());
southBox.add(jtf);
jtf.setPreferredSize(new Dimension(80,0));
southBox.add(sendB);
}
private void initialNorthBox() {
northBox = Box.createVerticalBox();
view = new JTextArea();
JScrollPane jsview = new JScrollPane(view);
jsview.setPreferredSize(new Dimension(0,180));
view.setEditable(false);
sendTA = new JTextArea();
JScrollPane jssendTA = new JScrollPane(sendTA);
northBox.add(jsview);
northBox.add(Box.createVerticalStrut(5));
northBox.add(jssendTA);
}
private void initialJFrame() {
jf = new JFrame();
jf.setBounds(250,100,500,500);
jf.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
private class sendBActionListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
try {
send();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
public void send() throws Exception {
if(sendTA.getText().length()==0) return ;
DatagramPacket dp = new DatagramPacket(sendTA.getText().getBytes(),
sendTA.getText().getBytes().length,
InetAddress.getByName(jtf.getText().trim()),
8888);
ds.send(dp);
view.append(Calendar.getInstance().get(Calendar.HOUR_OF_DAY)+":"
+Calendar.getInstance().get(Calendar.MINUTE)+"\n"+
sendTA.getText()+"\n");
sendTA.setText("");
}
public void receive() throws Exception {
new Thread() {
public void run() {
while(true) {
DatagramPacket dp = new DatagramPacket(new byte[1024],1024);
try {
dsr.receive(dp);
view.append(Calendar.getInstance().get(Calendar.HOUR_OF_DAY)+":"
+Calendar.getInstance().get(Calendar.MINUTE)+"\n"+
new String(dp.getData(),0,dp.getLength())+"\n");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
}
}
附(Java网络编程学习资料):http://t.cn/Ex4YBPX
Java 初学UDP传输的更多相关文章
- Java 使用UDP传输一个小文本文件
工具1:Eclipse 工具2:IntelliJ IDEA Java工程的目录结构(基于IntelliJ IDEA) 例1.1:接收方,因为接收到的数据是字节流,为了方便,这里是基于Apache co ...
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...
- java本地与树莓派中采用UDP传输文本、图片
今天解决了一个困扰好几天的问题,由于比赛需要,需要用java语言,并采用UDP传输协议,让树莓派与服务器(就是本机)建立连接传输视频,图片. 由于UDP是建立在无连接的协议上,因此就碰到了一个很尴尬的 ...
- java UDP传输
①:只要是网络传输,必须有socket . ②:数据一定要封装到数据包中,数据包中包括目的地址.端口.数据等信息. 直接操作udp不可能,对于java语言应该将udp封装成对象,易于我们的使用,这个对 ...
- 基于UDP传输协议局域网文件接收软件设计 Java版
网路传输主要的两大协议为TCP/IP协议和UDP协议,本文主要介绍基于UDP传输的一个小软件分享,针对于Java网络初学者是一个很好的练笔,大家可以参考进行相关的联系,但愿能够帮助到大家. 话不多说, ...
- java初学的分析
java初学的分析第一阶段:入门阶段学习目标:简单项目开发学习内容:1.Java入门书籍,Java基础知识.关于Java入门级的书,给大家推荐过<Java编程思想>.<Java核心技 ...
- Java实现UDP之Echo客户端和服务端
Java实现UDP之Echo客户端和服务端 代码内容 采用UDP协议编写服务器端代码(端口任意) 编写客户机的代码访问该端口 客户机按行输入 服务器将收到的字符流和接收到的时间输出在服务器consol ...
- 在两个Android设备间通过UDP传输目录内文件
这两天下了一个使用UDP传输目录内文件的程序,发出来给大家一起看看,共同进步.有问题请指教. 由于udp丢包比较厉害,因此使用了自定义的内部协议,进行双方的确认. 程序跑起来后,看网络状况,有时候会一 ...
- Android如何实现TCP和UDP传输
TCP和UDP在网络传输中非常重要,在Android开发中同样重要. 首先我们来看一下什么是TCP和UDP. 什么是TCP? TCP:Transmission Control Protocol 传输控 ...
随机推荐
- 转载及总结:cron表达式详解,cron表达式写法,cron表达式例子
cron表达式格式:{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}例 "0 0 12 ? * WED" 在每星期三下午12:00 执行(年份通常 ...
- js自执行事件
let a = document.createElement("a");let event = new MouseEvent("click");a.downlo ...
- 使用jTessBoxEditorFX训练Tesseract-OCR教程
使用jTessBoxEditorFX训练Tesseract-OCR教程 注:1,工具是JAVA编写的,所以在使用工具之间,需要安装JAVA环境. 2,安装Tesseract-OCR应用程序,并将目录添 ...
- SpringCloud系列六:Feign接口转换调用服务(Feign 基本使用、Feign 相关配置)
1.概念:Feign 接口服务 2.具体内容 现在为止所进行的所有的 Rest 服务调用实际上都会出现一个非常尴尬的局面,例如:以如下代码为例: Dept dept = this.restTempla ...
- Centos7的防火墙关闭
第一步.centos7安装service 第二步. 或者可以不用service,有另一个办法.
- 一个jQuery对象绑定多个事件
1.两个事件有两种不同的方法 jQuery("#id").click(func1(){}).mouseover(func2(){}) ; 2.两个事件调用同一种方法 jquery( ...
- IDEAL启动项目的时候报java.lang.NoClassDefFoundError: javax/servlet/Filter错误
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...
- 导出文件的时候 加大php内存
ini_set('max_execution_time', 3600); ini_set('memory_limit', '2048M');
- 学习TestNG,乍暖还寒冷时
时间:2019年2月23日,农历正月十九,星期六,天气晴,略有阳光,但下午三点多就不见阳光了. 地点:上海 昨夜雨疏风骤,浓睡不消残酒.试问卷帘人,却道海棠依旧.知否?知否?应是绿肥红瘦 是的,魔都上 ...
- Java框架spring 学习笔记(七):Spring相关概念
Spring是开源.轻量级.一站式框架. Spring核心主要两部分 aop:面向切面编程,扩展功能不是修改源代码实现. ioc:控制反转,把对象的创建交给Spring进行配置,比如一个类,在类里面有 ...