2.DatagramSocket(在Java中使用UDP协议编程的相关类)
用于接收和发送UDP的Socket实例。该类有3个构造函数:
DatagramSocket():通常用于客户端编程,它并没有特定监听的端口,仅仅使用一个临时的。程序会让 *** 作系统分配一个可用的端口。
DatagramSocket(int port):创建实例,并固定监听Port端口的报文。通常用于服务端
DatagramSocket(int port, InetAddress localAddr):这是个非常有用的构建器,当一台机器拥有多于一个IP地址的时候,码虚由它创建的实例仅仅接收来自LocalAddr的报文。
DatagramSocket具有的主要方法如下:
1)receive(DatagramPacket d):接收数据报扮毕文到d中。receive方法产生一个“阻塞”。“阻塞”是一个专业名词,它会产生一个内部循环,使程序暂停在这个地方,直到一个条件触发。
2)send(DatagramPacket dp):发送报文dp到目的地。
3)setSoTimeout(int timeout):设置超时时间,单位为毫秒。
4)close():关闭DatagramSocket。在应用程序退出的时候,通常会主动释放资源,关闭迟缺燃Socket,但是由于异常地退出可能造成资源无法回收。所以,应该在程序完成时,主动使用此方法关闭Socket,或在捕获到异常抛出后关闭Socket。
希望对您有帮助谢谢
使用 DatagramSocket(int port) 建立socket(套间字)服务。将数据打旦吵配包到DatagramPacket中去
通过socket服务发送 (send()方法)
关闭资源
public static void main(String[] args) {
DatagramSocket ds = null //建立套间字udpsocket服务
try {
ds = new DatagramSocket(8999) //实例化套间字,指定自己的port
} catch (SocketException e) {
System.out.println("Cannot open port!")
System.exit(1)
}
byte[] buf= "Hello, I am sender!".getBytes() //数据
InetAddress destination = null
try {
destination = InetAddress.getByName("192.168.1.5") //需要发送的地址
} catch (UnknownHostException e) {
System.out.println("Cannot open findhost!")
System.exit(1)
}
DatagramPacket dp =
new DatagramPacket(buf, buf.length, destination , 10000)
//打包到DatagramPacket类型中(DatagramSocket的send()方法接受此类,注意10000是接受地址的端口,不同于自己的端口!)
try {
ds.send(dp) //发送数据
} catch (IOException e) {
}
ds.close()
}
}
接收步骤:
使用 DatagramSocket(int port) 建立socket(套间字)服务。(我们注意到此服务即可以接收,又可以发送),port指定监视接受端口。
定义一个数据包(DatagramPacket),储存接收到的数据,使用其中的方法提取传送的内容
通过DatagramSocket 的receive方法将接受到的数据存入上面定义的包中
使用DatagramPacket的方法,提模指取数据。
关闭资源。
import java.net.*
public class Rec {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket(10000) //定义服务,监视端口上面的发送端口,注意不是send本身端口
byte[] buf = new byte[1024]//接受内容的大小,注意不要溢出
DatagramPacket dp = new DatagramPacket(buf,0,buf.length)//定义一个接收的包
ds.receive(dp)//将接受内容封装到包中
String data = new String(dp.getData(), 0, dp.getLength())//利用getData()方法取出内容碰扒
System.out.println(data)//打印内容
ds.close()//关闭资源
}
}
希望能够帮助到你,望采纳!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)