您的位置:首页 > 理论基础 > 计算机网络

26-网络编程-07-网络编程(UDP协议-发送端)

2015-08-11 17:16 826 查看
/*
* 【Socket】
* (1)Socket就是为网络服务提供的一种机制
* (2)通信的两端都有Socket
* (3)网络通信起始就是Socket间的通信
* (4)数据在两个Socket间通过IO传输
*
* 想要通讯,那么必须有一个Socket,数据在Socket两端进行传输
* Socket就是通讯的两个端点,类似于轮船在两个港口之间来回运输货物,那么两个港口=Socket,货物=传输的数据
*
* 【UDP传输】
* (1)DatagramSocket与DatagramPacket
* (2)建立发送端,接收端
* (3)建立数据包
* (4)调用Socket的发送接收方法
* (5)关闭Socket
* 发送端与接收端是两个独立运行的程序。
*/

/**
* 【DatagramSocket类】
* 打开API,点进java.net类,找到DatagramSocket类,其内说明:
* 		此类表示用来发送和接收数据报包的套接字。
* 示例:DatagramSocket s = new DatagramSocket(null); s.bind(new InetSocketAddress(8888));
* 这等价于:DatagramSocket s = new DatagramSocket(8888);
* 两个例子都能创建能够在 UDP 8888 端口上接收广播的 DatagramSocket。
*
* 【DatagramPacket类】
* 打开API,点进java.net类,找到DatagramPacket类,其内说明:
* 		此类表示数据报包。 数据报包用来实现【无连接】包投递服务。
* 每条报文仅根据该包中包含的信息从一台机器路由到另一台机器。从一台机器发送到另一台机器的多个包可能选择不同的路由,
* 也可能按不同的顺序到达。不对包投递做出保证(UDP不是可靠协议,类似QQ给离线好友发消息,直接发送,对方是否收到不知道)。
*
* 其内构造方法摘要:
* (1)DatagramPacket(byte[] buf, int length)
*
* (2)DatagramPacket(byte[] buf, int length, InetAddress address, int port)
*
* (3)DatagramPacket(byte[] buf, int offset, int length)
*
* (4)DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
*
* (5)DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)
*
* (6)DatagramPacket(byte[] buf, int length, SocketAddress address)
*
*  构造函数说明详见API,注意,包分为用来发送的和用来接收的,(1)~(6)中凡是带Address即IP地址的,都是用来
*  发送的,因为既然发送,必须明确目的地,那么这个InetAddress就是目的地。所以(1)和(3)是在接收包时候的构造函数,
*  (2)、(4)、(5)、(6)是在发包时候的构造函数。
*/

package demo;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPDemo {

public static void main(String[] args) throws IOException {

/*
* 创建UDP传输的发送端
*
* 思路:
* 1.建立UDP的Socket服务
* 2.将要发送的数据封装到数据包中
* 3.通过UDP的Socket服务将数据包发送出去
* 4.关闭Socket服务。
*/

System.out.println("发送端启动......");

//1.UDPSocket服务,使用DatagramSocket对象。
DatagramSocket ds = new DatagramSocket();

//2.将要发送的数据封装到数据包中。
String str = "udp传输演示";

//这里使用DatagramPacket类中的构造函数将数据封装到该对象包中,使用(2)构造函数,那么先创建该构造函数的参数,如buf等。

byte[] buf = str.getBytes();//利用String类的getBytes()方法将str转成字节数组

DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("10.196.19.56"),10000);
//10.196.19.56是本地主机地址,10000是端口号,发给本地主机10000端口的应用程序

//3.通过udp的socket服务将数据包发送出去,使用send方法
ds.send(dp);

//4.关闭资源
ds.close();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: