Java使用DatagramSocket代表UDP协议的Socket,DatagramSocket本身只是码头,不维护状态,不能产生IO流,它的唯一作用就是接收和发送数据报,Java使用DatagramPacket来代表数据报,DatagramSocket接收和发送的数据都是通过DatagramPacket对象完成的。
先看一下DatagramSocket的构造器。
DatagramSocket():创建一个DatagramSocket实例,并将该对象绑定到本机默认IP地址、本机所有可用端口中随机选择的某个端口。
DatagramSocket(int prot):创建一个DatagramSocket实例,并将该对象绑定到本机默认IP地址、指定端口。
DatagramSocket(int port, InetAddress laddr):创建一个DatagramSocket实例,并将该对象绑定到指定IP地址、指定端口。
通过上面三个构造器中的任意一个构造器即可创建一个DatagramSocket实例,通常在创建服务器时,创建指定端口的DatagramSocket实例--这样保证其他客户端可以将数据发送到该服务器。一旦得到了DatagramSocket实例之后,就可以通过如下两个方法来接收和发送数据。
receive(DatagramPacket p):从该DatagramSocket中接收数据报。
send(DatagramPacket p):以该DatagramSocket对象向外发送数据报。
从上面两个方法可以看出,使用DatagramSocket发送数据报时,DatagramSocket并不知道将该数据报发送到哪里,而是由DatagramPacket自身决定数据报的目的地。就像码头并不知道每个集装箱的目的地,码头只是将这些集装箱发送出去,而集装箱本身包含了该集装箱的目的地。
在JAVA中,发送和接收多播信息的方法:
发送多播信息需经历步骤
确定发送的具体信息内容
Stringmsg="Hello";
选用专门为多播指定的D类IP地址(224001到239255255255),创建一个多播组
InetAddressgroup=InetAddressgetByName("228567");
使用指定的端口(一般选1024以上的端口号)建立多播套接字
s=new(6789);
加入多播组
sjoinGroup(group);
创建一个数据报封装多播信息
hi=new(msggetBytes(),msglength(),
group,6789);
发送
ssend(hi);
接收多播信息的步骤
开辟接收缓冲区
byte[]buf=newbyte[1000];
创建接收数据报
recv=new(buf,buflength);
接收
sreceive(recv);
注意:以上发送和接收程序在同一个文件中实现,若在不同文件中实现则应分别定义多播套接字并加入多播组。
3.与已知IP和端口的端点通信
在互联网上主要采用TCP和UDP来实现两点之间的通信。采用TCP可可靠传送信息,但花费时间较多;采用UDP可快速传递信息,但不能保证可靠传递。
JAVA实现TCP通信的方法:
利用Socket(InetAddressaddr,intport)和Socket(Stringhost,intport),创建客户端套接字,利用(intport)创建服务器端套接字,port端口就是服务器监听连接请求的端口,通过调用aept()返回一个最近创建的Socket对象,该Socket对象绑定了客户程序的IP地址或端口号。通过调用Socket的()方法获得输入流读传送来的信息,也可能通过调用Socket的()方法获得输出流来发送消息。
JAVA实现UDP通信的方法:
使用(byte[]buffer,intlength,InetAddressaddr,intport)确定数据包数组、数组的长度、数据包的地址和端口信息。使用()创建客户端套接字,而服务器端则采用(intport),调用send(dgp)和receive(dgp)来发送和接收数据包。本文设计的程序采用UDP。
P2P(Peer-to-Peer端到端)模型是与C/S(客户/服务器)模型相对应。基于C/S的用户间通信需要由服务器中转,在C/S中的服务器故障将导致整个网络通信的瘫痪。而基于P2P的用户间通信则是直接通信,去掉了服务器这一层,带来的显著优点是通信时没有单一的失败点,一个用户的故障不会影响整个P2P网络。本文提供了一种用JAVA实现P2P网络通信的方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)