1.UDP协议与TCP协议的区别
udp协议-速度快/不需要建立连接/不稳定
tcp协议-速度慢/需要经过3次握手建立连接/信息传输可靠
udp只管发送信息,不管对方是否接受到信息(有点类似短信,信息我是发出去了,但是对方是否看到就不关我事了)
tcp发送信息前会先发送确定信息,确认对方是否准备好接受信息,确认对方在线后继续发送信息。且每次信息发送对方都会有回应。(类似打电话,电话打出去看对方是否接通<第一次握手>
,对方接了问干撒子<第二次握手>
,回复哦,你在说,那我开始说了<第三次握手>
)
2.1Socket信息发送
Socket信息发送需要创建信息包;包中包含4部分类容:1.发送信息内容/2.信息长度/3.ip 地址4.端口号
import java.io.IOException;
import java.net.*;
//*********Socket信息发送需要4部分类容:1.发送信息内容/2.信息长度/3.ip 地址4.端口号
public class Socket信息发送 {
public static void main(String[] args) throws IOException {
DatagramSocket so1=new DatagramSocket();//Socket对象创建
byte[] by1="好男人就是我!".getBytes();//所发送到信息
int length1=by1.length;//信息长度
Inet4Address ip1= (Inet4Address) Inet4Address.getByName("192.168.1.34");//所需ip 地址
int port1=8081;//端口号
//创建Socket信息包,内容包括:发送信息,信息长度,ip,端口号
DatagramPacket p1=new DatagramPacket(by1,length1,ip1,port1);
so1.send(p1);//信息发送
//注:信息发送完后,一定要注意关闭
so1.close();//同时释放资源
上述代码使用udp协议进行信息发送,所以信息发送后没有任何回应
注:信息发送完成后,一定!一定!一定!记得关闭连接,释放资源
2.2Socket信息接收
接收方步骤与发送方大致一样,需要Socket对象,需要信息包。
但是包中所需要的内容为(信息,信息长度)
import java.net.SocketException;
//***********udp信息接受端
public class udp_receive {
public static void main(String[] args) throws IOException {
DatagramSocket s2=new DatagramSocket(8081);
byte[] by2=new byte[1024];//该空数组用于暂时存放接受信息
int length2=by2.length;
DatagramPacket p2=new DatagramPacket(by2,length2);//接受方只需接收两部分:信息内容/信息长度
s2.receive(p2);//如果未接受到信息,程序会一直卡在该步骤,一直等待接收
String str1=new String(p2.getData(),0000,p2.getLength());//信息整合,getData()是接收信息;getLength()是信息长度
System.out.println(str1);
}
}
信息包p2还可以通过调用getAddress()和getPort()获得发送方的ip地址和端口号。
一般发送方的端口号是系统随机分配的
Inet4Address in3= (Inet4Address) p2.getAddress();//通过信息包调用getAddress()获取发送方ip 地址
System.out.println(in3);
String st2=new String(String.valueOf(p2.getPort()));//获取发送端端口号
System.out.println(st2);