網絡基礎知識
- 每個計算設備上都有若干個網卡
- 每個網卡上有(全球唯一)單獨的硬件地址,MAC地址
- tracert 查看當前機器和目標機器的訪問中繼,例如:tracert
- 通訊協議:TCP和UDP
- TCP:Transmission Control Protocol
– 傳輸控制協議,面向連接的協議
– 兩臺機器的可靠無差錯的數據傳輸
– 雙向字節流傳輸 - UDP:User Datagram Protocol
– 用戶數據報協議,面向無連接協議
– 不保證可靠的數據傳輸
– 速度快,也可以在較差網絡下使用
UDP
- DatagramSocket: 通訊的數據管道
– send 和 receive方法,每一方都可以send和receive
–(可選,多網卡)綁定一個IP和Port - DatagramPacket
– 集裝箱:封裝數據
– 地址標籤:目的地IP+Port - 實例
– 無主次之分
– 接收方必須早於發起方執行
UDP示例:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.concurrent.ThreadPoolExecutor;
/**
* @ClassName:UdpRecv
* @Description:接收方,需要先開啓
* @author: Torey
*/
public class UdpRecv {
public static void main(String[] args) throws IOException, InterruptedException {
DatagramSocket ds = new DatagramSocket(3000);
byte[] bytes = new byte[1024];
DatagramPacket dp=new DatagramPacket(bytes,1024);
System.out.println("UdpRecv:我在等待消息");
ds.receive(dp);
System.out.println("UdpRecv,:我接收到消息");
String strRecv=new String(dp.getData(),0,dp.getLength())+" from "+dp.getAddress().getHostAddress()+":"+dp.getPort();
System.out.println(strRecv);
Thread.sleep(1000);
System.out.println("UdpRecv:我要發信息");
String str="UdpRecv: I'm LiMing,Hello";
DatagramPacket dp2=new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("127.0.01"),dp.getPort());
ds.send(dp2);
System.out.println("UdpRecv:我發送信息結束");
ds.close();
}
}
import java.io.IOException;
import java.net.*;
/**
* @ClassName:UdpSend
* @Description:發送方
* @author: Torey
*/
public class UdpSend {
public static void main(String[] args) throws IOException, InterruptedException {
//定義數據管道
DatagramSocket ds=new DatagramSocket();
String str="UdpSend,AAA:Hello,xiaoMing";
DatagramPacket datagramPacket=new DatagramPacket(str.getBytes(),str.length(),
InetAddress.getByName("127.0.0.1"),3000);
System.out.println("UdpSend:發送信息");
ds.send(datagramPacket);
System.out.println("UdpSend:發送信息結束");
Thread.sleep(1000);
byte[] buf=new byte[1024];
DatagramPacket dp2 = new DatagramPacket(buf, 1024);
System.out.println("UdpSend:我在等待信息");
ds.receive(dp2);
System.out.println("UdpSend:我接收到信息");
String str2=new String(dp2.getData(),0,dp2.getLength())
+" from "+dp2.getAddress().getHostAddress()+":"+dp2.getPort();
System.out.println(str2);
ds.close();
}
}