socket是为网络服务的提供的一种机制,网络通信就是指的socket间的通信,因为通信的两端都有socket,数据在两个socket之间通过IO通信,简单的说就是socket相当于计算机上的一个网络应用程序,这个应用程序最终通过网口传出去.
网络传输的三要素:IP,端口,协议,协议中最长用的是TCP协议和UDP协议.
你上面问的DatagramSocket就是使用UDP协议的socket传输.
UDP协议:将数据及源和目的封装成数据包,不需要建立连接,每个数据包的大小限制在64K内,因为是无连接的,所以是不可靠协议,但是速度快,聊天工具就是使用的是UDP协议.
TCP协议:建立连接形成数据的传输通道,在连接中进行大量的数据传输,通过三次握手完成连接是可靠协议,但效率会低一些,下载用的是TCP协议.
对于UDP的socket传输要有发送端和接受端
UDP的发送端:
DatagramSocket ds = new DatagramSocket();
byte[] buf = "udp".getBytes();
DatagramPacket dp = new DatagramPacket(
buf,
buf.length,
InetAddress.getByName("127.0.0.1"),
10000);
ds.send(dp);
ds.close();
UDP接受端:
DatagramSocket ds = new DatagramSocket(10000);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
ds.receive(dp);
String IP = dp.getAddress().getHostAddress();//获取IP地址
String data = new String(dp.getData(),0,dp.getLength());//获取数据
int port = dp.getPort();//获取端口
System.out.println("IP:"+IP+",data:"+data+",port:"+port);
ds.close();
我这个代码是看不到效果的,因为UDP是无连接传输,如果接受端当时是开着的,就可以接收到,如果没有接受端,那传输的那些数据就丢失了,TCP的传输,你可以看毕老师的java基础视频,老师说的很详细而且有效果,在这里打字敲太费劲而且不一定能说清楚 |