看了很多资料,在这就不写相关链接了。^ ^
在这总结一下,常见的传输协议,TCP(Transmission Control Protocol传输控制协议)和UDP(User Datagram Protocol 用户数据报协议),端口地址0~65535,
其中0~1023用于知名网络服务和应用,用户的普通网络应用应该在1023以上。
主要是对UDP比较陌生,所以重点做一下关于DatagramSocket的相关笔记。
UDP协议在java中对应的类是Java.net.DatagramSocket,而TCP协议对应的是Java.net.ServerSocket(服务端)和Java.net.Socket(客户端).
DatagramSocket有如下方法:
public DatagramSocket()--无参构造函数,那么构造的数据报套接字会绑定到本地主机任何可用的端口上;
public DatagramSocket(int port)--构造的数据报套接字会绑定到指定的本地主机的端口上;
public DatagramSocket(int port,InetAddr)--创建的数据报套结字会绑定的指定的本地地址,即指定网卡发送和接受数据。
如果在创建DatagramSocket的时候没有指定网卡的IP地址,在发送数据时,底层网卡驱动会自动选择一块网卡去发送;在接受数据时,会接受所有网卡收到的与端口一致的数据。
发送信息时,可以不指定端口号;接受消息时,必须要指定端口号,因为要接受指定的数据。
发送数据使用DatagramSocket.send(DatagramPacket p);接受数据的时候使用DatagramSocket.receive(DatagramPacket p).
数据载体DatagramPacket:
public DatagramPacket(byte[] buff,int lenght)--构造DatagramPacket,用来接受长度为lenght的数据包;
public DatagramPacket(byte[] buff,int lenght,InetAddress addr,int port)--构造DatagramPacket,用来将长度为length的数据包发送到指定主机上的指定端口上。
接受数据时使用第一种构造方法,发送数据时使用第二种构造方法。
tcp与udp区别:
java编程区别:
tcp是java.net.ServerSocket(用于服务器端)和java.net.Socket(用于客户端);
UDP是java.net.DatagramSocket.
UDP程序例子
发送程序:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UdpSend {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket();
String str = "hello , world!";
DatagramPacket dp = new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("192.168.0.105"),3000);
ds.send(dp);
ds.close(); //关闭连接
}
}
接收程序:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UdpRecv {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket(3000);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
ds.receive(dp);
String str = new String(dp.getData(),0,dp.getLength());
System.out.println(str);
System.out.println("IP:" + dp.getAddress().getHostAddress() + ",PORT:" + dp.getPort());
ds.close();
}
}