码迷,mamicode.com
首页 > 其他好文 > 详细

简单的UDP编程1

时间:2017-12-24 18:40:14      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:ams   reply   []   分享   splay   结果   ring   咨询   图片   

服务端:

技术分享图片
 1 package udp;
 2 
 3 import java.io.IOException;
 4 import java.net.DatagramPacket;
 5 import java.net.DatagramSocket;
 6 import java.net.SocketException;
 7 
 8 //服务器
 9 public class AskServer {
10     public static void main(String[] args) throws IOException {
11         //1.创建一个DatagramSocket   用来发送或者接收数据的
12         DatagramSocket socket  = new DatagramSocket(8888);//端口用来接收数据
13         
14         //2.使用DatagramSocket接收数据
15         //接收数据 要使用 DatagramPacket
16         byte [] buf = new byte [1024];//接收数据不需要知道对方IP
17         DatagramPacket packet = new DatagramPacket(buf, buf.length);
18         socket.receive(packet);
19         //System.out.println(packet.getLength());//数据包的长度
20         //System.out.println(packet.getData());//对方发送的数据
21         //System.out.println(new String(packet.getData(),0,packet.getLength()));
22         System.out.println("来自客户端的消息:"+new String(buf,0,packet.getLength()));
23     /*    System.out.println(packet.getAddress());//对方的ip?
24         System.out.println(packet.getPort());//对方的端口号*/    
25         
26         //3.向客户端发送数据
27         String reply ="亲,在的";
28         byte [] buf2 = reply.getBytes();
29         //对方的IP可能随时变化   通过接收的数据包能够获取对方的ip和端口
30         DatagramPacket packet2 = new DatagramPacket(buf2, buf2.length, packet.getAddress(), packet.getPort());
31         socket.send(packet2);
32         
33         //4.关闭
34         socket.close();
35     }
36 }
AskServer.java

客户端:

技术分享图片
 1 package udp;
 2 
 3 import java.io.IOException;
 4 import java.net.DatagramPacket;
 5 import java.net.DatagramSocket;
 6 import java.net.InetAddress;
 7 import java.net.SocketException;
 8 import java.net.UnknownHostException;
 9 
10 /**
11  * @author superdrew
12  *        功能:客户和咨询师在线交流
13  *        使用udp完成
14  *        注意:
15  *        1.udp没有严格意义区分服务端和客户端,双方都是平等的(主动发送请求是客户端,被动接收请求的是服务端)
16  *        2.udp编程和IO流没有关系
17  *        3.udp两个核心类
18  *            DatagramSocket:用来接收或者发送数据包
19  *            DatagramPacket:数据包
20  *        4.客户端不写 port 端口 会 自动生成一个端口
21  *
22  *        分解1:先完成一次单向通信
23  *           2:一次双向通信
24  *           3:多次双向通信
25  *
26  *        总结:1。DatagramSocket 
27  *                用来接收和发送数据的
28  *                socket.send(packet)
29  *                socket.receive(packet2)
30  *            2。DatagramPacket
31  *                封装了数据,对方的IP,对方的接收端口
32  *                getLength()   获取对方发送数据的长度
33  *                getData()     获取对方发送的数据 (字节数组)
34  *                getAddress()  获取对方的ip
35  *                getPort()     获取对方的发送数据的端口
36  *            
37  */
38 
39 public class AskClient {
40     public static void main(String[] args) throws IOException {
41         //1.创建DatagramSocket 用来发送数据
42         DatagramSocket socket = new DatagramSocket(9999);//发送端的端口
43         
44         //2.使用DatagramSocket发送数据
45         //发送数据只前 要 创建  DatagramPacket 数据包
46         String info = "亲,在吗?";
47         byte [] buf = info.getBytes();
48         DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(),8888);
49         socket.send(packet);
50         
51         byte [] buf2 = new byte [1024];
52         DatagramPacket packet2 = new DatagramPacket(buf2,buf2.length);
53         socket.receive(packet2);//接收的数据都放到packet2里面了  对方发送的数据封装到了buf2 用 packet2.getData 效果是一样的s
54         String result = new String(buf2,0,buf2.length);
55         System.out.println("来自服务器的消息:"+result);
56         
57         //3.关闭资源
58         socket.close();
59     }
60 
61 }
AskClient.java

操作步骤:

① 运行服务端;② 运行客户端;

结果展示:

技术分享图片

 

技术分享图片

简单的UDP编程1

标签:ams   reply   []   分享   splay   结果   ring   咨询   图片   

原文地址:http://www.cnblogs.com/superdrew/p/8098684.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!