黑马程序员_java高级篇网络编程UDP实战Day7(下)
来源:互联网 发布:2014最新网络红歌 编辑:程序博客网 时间:2024/06/01 09:31
----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! -----------
黑马程序员_java高级篇网络编程UDP实战Day7(下)
这篇主要记录自己学习UDP的实践
不管是UDP还是TCP,都是建立在Socket基础上的,使用UDP发送数据的步骤:
(一)简单发送包
发送包
1, 建立发送端,接收端
//创建udp服务
DatagramSocket socket=new DatagramSocket();
2, 建立数据包
//构造数据包 DatagramPacket pocket=new DatagramPacket("abc".getBytes(),3,InetAddress.getByName("192.168.1.100"),10001);
//调用socket发送的方法
socket.send(pocket);
//关闭socket
socket.close();
接收包
DatagramSocket socket1=new DatagramSocket(10001);
//2,定义一个数据包,要存贮接收的数据,因为数据包中有更多功能提取数据
byte[] b=newbyte[1024];
DatagramPacket pocket1=new DatagramPacket(b,b.length);
//3,接收
socket1.receive(pocket1);//阻塞式方法
//4拿出数据
System.out.println(pocket1.getLength());
//5,关闭资源
socket1.close();
效果图:
(二)自行输入
如果将发送端中改成自己输入,这又要设及到IO流了,如下(将输入端的代码改变一下就可以):
BufferedReader br=new BufferedReader(newInputStreamReader(System.in));
String str=""; try { while((str=br.readLine())!=null) { DatagramSocket sock=new DatagramSocket(); DatagramPacket p=new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("192.168.1.100"),10011); sock.send(p); }
(三)可以接收也可以发送
设及到多线程问题,因为在发送的时候要接收,在接收的时候要发送。
如下写两个线程类
class Rece implements Runnable{ public void run() { // TODO Auto-generatedmethod stub DatagramSocket sock = null; try { sock = new DatagramSocket(10011); } catch (SocketException e) { // TODO Auto-generatedcatch block e.printStackTrace(); } while(true) { byte[] b=new byte[1024]; DatagramPacket p=new DatagramPacket(b,b.length); try { sock.receive(p); } catch (IOException e) { // TODO Auto-generatedcatch block e.printStackTrace(); } } } } class Sendinfor implements Runnable{ public void run() { // TODO Auto-generatedmethod stub BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); int len=0; String str=""; try { while((str=br.readLine())!=null) { DatagramSocket sock=new DatagramSocket(); DatagramPacket p=newDatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("192.168.1.100"),10011); sock.send(p); } } catch (SocketException e) { // TODO Auto-generatedcatch block e.printStackTrace(); } catch (UnknownHostException e) { // TODO Auto-generatedcatch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generatedcatch block e.printStackTrace(); } } }
在线程中启动
Rece re=new Rece();
Sendinfor sif=new Sendinfor();
new Thread(re).start();
newThread(sif).start();
----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! -----------
- 黑马程序员_java高级篇网络编程UDP实战Day7(下)
- 黑马程序员_java高级篇网络编程基础概念Day7
- 黑马程序员_java高级篇网络编程TCP实战Day8(下)
- 黑马程序员_java高级篇网络编程TCP实战Day8(上)
- 黑马程序员_Java基础_网络编程(下)_24
- 黑马程序员_java基础(12)网络编程之UDP
- 黑马程序员_Java 网络编程
- 黑马程序员_Java网络编程
- 黑马程序员_java网络编程
- 黑马程序员_java网络编程
- 黑马程序员_Java网络编程
- 黑马程序员_java网络编程
- 黑马程序员_java 网络编程
- 黑马程序员_java网络编程
- 黑马程序员_java网络编程
- 黑马程序员_java 网络编程
- 黑马程序员_java网络编程
- 黑马程序员_Java网络编程
- myeclipse配置hadoop开发环境
- MFC对文件文件夹转移、删除、重命名、复制
- Html.ActionLink 参数
- 组合数学第一发 hdu 2451 Simple Addition Expression
- 撒发生
- 黑马程序员_java高级篇网络编程UDP实战Day7(下)
- QT下对OpenCV抓取图片的显示
- Python - Hello World
- [notice] Parent: child process exited with status 3221225477 -- Restarting.
- MyEclipse注册机
- shell中的数组
- 如何正确选择主流开发语言?
- 通过增加函数来提高代码质量的 7 个理由
- 开始写博客啦……