j2se----utp----socket

public DatagramSocket(); //因为他没有指定端口号,那么系统将为他分配一个还没有占用的端口号,适用于先发送的情况,因为你发过去后,虽然这些东西都是自动指定的,这是对方也能知道你的端口和ip,如果你是发送方,而且去指定端口,万一端口被占用,你就只能干等了

public DatagramSocket(int port);//如果他要先收再发,那么就用这个

public DatagramSocket(int port,InetAddress iaddr);//如果程序要在有多个ip地址的计算机上运行,那么他就要选择这个

close() //通知驱动程序释放由DatagramSocket保留的资源,那么这时系统就会将分配给这个程序的端口号释放,以便于分配给其他网络程序使用

send(DatagramPacket p);
receive(DatagramPacket p);

如果把DatagramSocket比作港口码头,那么DatagramPacket就是发送和接收数据的集装箱
public DatagramPacket(byte[] buf,int length);//这个是用于接收数据的集装箱
public DatagramPacket(byte[] buf ,int length,InetAddress address,int port);//这个是用于发送数据的集装箱

getInetAddress 和getPort就可以知道发送端的ip和端口号
getData//这个方法就是返回buf 和getLength//就是返回buf的长度  

因为我们不知道发过来的数据包是多大,所以就定义一个足够大的buf来接收数据

InetAddress 类
getbyName() //这个方法可以按照一个字符串格式来返回一个InetAddress实例对象
getHostAddress() //这个可以返回一个字符串形式的ip地址


DatagramSocket ds = new DatagramSocket();
String str = "fuck";
ds.send(new DatagramPacket(str.getBytes()),str.getBytes().length,InetAddress.getByName("192.168.0.8"),3000);
ds.close();

接收方:
DatagramSocket ds = new DatagramSocket(3000);
byte[] buf = new byte[1024];
ds.receive(dp);
new String(dp.getData(),0,dp.getLength());
String ip = dp.getAddress().getHostAddress();
ds.close();

DatagramPacket dp = new DatagramPacket(buf,3000);

你可能感兴趣的:(J2SE)