一、InetAddress
java.net包下,此類表示互聯(lián)網(wǎng)協(xié)議(IP)地址
static InetAddress getByName(String host)//根據(jù)主機(jī)名或者IP地址獲取相關(guān)信息
關(guān)鍵在于如何獲取InetAddress對象
二、使用UDP協(xié)議發(fā)送對象
1.創(chuàng)建發(fā)送端Socket對象
DatagramSocket:此類用來發(fā)送和接受數(shù)據(jù)報包的套接字,基于UDP協(xié)議
(1)DatagramSocket():創(chuàng)建Socket對象并隨機(jī)分配端口號
DatagramSocket ds = new DatagramSocket();
(2)DatagramSocket(int port ):創(chuàng)建Socket對象并指定端口號
2.創(chuàng)建數(shù)據(jù)并打包
DatagramPacket:此類表示數(shù)據(jù)報包
數(shù)據(jù)byte[]
設(shè)備地址IP
進(jìn)程的地址:端口號
DatagramPacket(byte[] buf,int length,InetAddress address,int port)
3.發(fā)送數(shù)據(jù)
ds.send(p);
4.釋放資源
ds.close();
三、UDP接收數(shù)據(jù)
1.創(chuàng)建接收端Socket對象
DatagramSocket ds = new DatagramSocket(8888);
2.接收數(shù)據(jù)
byte[] bys = new byte[1024];
DatagramPacket dp = new DatagramPcket(bys,bys.length);
ds.receive(dp);//阻塞
3.解析數(shù)據(jù)
//InetAddress getAddress():獲取發(fā)送端的IP對象
InetAddress address = dp.getAddress();
//byte[] getData():獲取接收到的數(shù)據(jù),也可以直接創(chuàng)建包對象時的數(shù)組
byte[] data = dp.getData();
//int getLength():獲取具體收到的字節(jié)個數(shù)
int length = dp.getLength();
4.輸出數(shù)據(jù)
System.out.println("sender---->" + address.getHostAddress());
System.out.println(new String(data,0,length));
5.釋放資源
dp.close();
UDP協(xié)議收發(fā)數(shù)據(jù)的注意事項: 端口號錯誤,數(shù)據(jù)可以正常發(fā)出,不會出現(xiàn)異常,但是收不到數(shù)據(jù)
四、使用TCP發(fā)送數(shù)據(jù)
1.創(chuàng)建發(fā)送端Socket對象(創(chuàng)建連接)
Java.net.Socket實現(xiàn)客戶端套接字
Socket(InetAddress address,int port)
Socket s = new Socket(InetAddress address,int port)
2.獲取輸出流對象
OutputStream os = s.getOutputStream();
3.發(fā)送數(shù)據(jù)
String str = "hello tcp";
os.write(str.getBytes());
4.釋放資源
s.close();
四、TCP接收端
1.創(chuàng)建接收端Socket對象
Java.net.ServerSocket
ServerSocket(int port);
ServerSocket ss = new ServerSocket(10086);
2.監(jiān)聽(阻塞)
ServerSocket中沒有關(guān)于獲取數(shù)據(jù)的方法
Socket s = ss.accept();
3.接受數(shù)據(jù)
InputStream is = s.getInputStream();
4.獲取數(shù)據(jù)
byte[] bys = new byte[1024];
int len = is.read(bys);
5.輸出數(shù)據(jù)
System.out.println(new String(bys,0,len));
6.釋放資源
s.close();