网络基础知识
- 每个计算设备上都有若干个网卡
- 每个网卡上有(全球唯一)单独的硬件地址,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();
}
}