练习UDP发送接收
来源:互联网 发布:不用网络最好玩的游戏 编辑:程序博客网 时间:2024/05/22 06:37
最近进入网络编程这块了,今天视频上把UDP的发送接受看完,然后自己晚上练习写了下,但还是需要提示才写完了
发送:
import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;public class send implements Runnable{private DatagramSocket ds;public send(DatagramSocket ds){this.ds=ds;}public void run() {try {BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));String line=null;while ((line=bufr.readLine())!=null){byte[] buf=line.getBytes();DatagramPacket dp=new DatagramPacket(buf, buf.length,InetAddress.getByName("172.16.227.1"),22222);ds.send(dp);if (line.equals("886"))break;}ds.close();} catch (Exception e) {}}}
首先是需要网络编程传输必须要的DatagramSocket,此类表示用来发送和接收数据报包的套接字。
数据报套接字是包投递服务的发送或接收点。每个在数据报套接字上发送或接收的包都是单独编址和路由的。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。
在 DatagramSocket 上总是启用 UDP 广播发送。为了接收广播包,应该将 DatagramSocket 绑定到通配符地址。在某些实现中,将 DatagramSocket 绑定到一个更加具体的地址时广播包也可以被接收。
示例:DatagramSocket s = new DatagramSocket(null); s.bind(new InetSocketAddress(8888));
这等价于:DatagramSocket s = new DatagramSocket(8888);
两个例子都能创建能够在 UDP 8888 端口上接收广播的 DatagramSocket。
然后使用键盘录入
<span style="white-space:pre"></span>BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));String line=null;while ((line=bufr.readLine())!=null){
上面这三行需要熟练运用。
接着把数据放入包中,数据信息,数据长度,地址ip,端口,最后发送数据关闭之
<span style="white-space:pre"></span>DatagramPacket dp=new DatagramPacket(buf, buf.length,InetAddress.getByName("172.16.227.1"),22222);ds.send(dp);
接收:
import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;public class rece implements Runnable{private DatagramSocket ds;public rece(DatagramSocket ds){this.ds=ds;}public void run() {try {while(true){byte[] buf=new byte[1024];DatagramPacket rece=new DatagramPacket(buf, buf.length);ds.receive(rece);String ip=rece.getAddress().getHostAddress();int port=rece.getPort();String text=new String(rece.getData(),0,rece.getLength());System.out.println(ip+":"+port+":"+text);if (text.equals("886"))System.out.println(ip+"...退出聊天室");}}catch (Exception e) {}}}
首先同样是需要Socket来创建传输。
<span style="white-space:pre"></span>byte[] buf=new byte[1024];DatagramPacket rece=new DatagramPacket(buf, buf.length);ds.receive(rece);这里用于接受数据,然后用
String ip=rece.getAddress().getHostAddress();
int port=rece.getPort();String text=new String(rece.getData(),0,rece.getLength());解析需要的地址端口和内容
最后在主函数里面还第一次使用了线程。
import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.SocketException;public class testChar {public static void main(String[] args) throws IOException{DatagramSocket send=new DatagramSocket();DatagramSocket rece=new DatagramSocket(22222);new Thread(new send(send)).start();new Thread(new rece(rece)).start();}}
String ip=rece.getAddress().getHostAddress();int port=rece.getPort();String text=new String(rece.getData(),0,rece.getLength());
0 0
- 练习UDP发送接收
- udp发送接收数据
- udp发送接收
- UDP 发送和接收
- UDP 发送接收 struct
- Udp消息发送接收示例
- C# UDP接收和发送
- UDP发送和接收程序
- UDP发送与接收数据
- UDP信息接收与发送
- UDP发送接收尺寸问题。
- UDP发送和接收程序
- udp下接收发送数据
- C# UDP接收和发送
- Udp 发送端&接收端
- [C#] 接收和发送UDP数据
- 使用UDP发送和接收消息
- c#中UDP数据发送和接收
- LintCode:更新二进制位
- 触发器
- 入门网络安全第一天
- 杭电ACM的初学者入门 2010
- 爬爬爬之路:UI(十一) UITableView(三) 自定义Cell 多Cell混合 自适应高度 及cell的状态控制
- 练习UDP发送接收
- Android性能优化之常见的内存泄漏
- IOS 实现不定参数方法
- LintCode:最多有k个不同字符的最长子字符串
- A First Look at Rust Language
- 几个小问题weblogic
- Elasticsearch [2.0] ☞ Java Client API ☞ Query DSL
- 九度 题目1055:数组逆置
- 抽象工厂模式