IP:定位网络中的不同节点(电子设备:手机,电脑,路由器…)
IPV4 4个字节 32位 IPV6
特殊的IP:
192.168.0.0~192.168.255.255 局域网内部使用
127.0.0.1 本地IP
localhost 本地域名
IP和域名: DNS域名解析服务器
InetAddress 此类表示互联网协议 (IP) 地址。
端口:区分不同软件
0~65535 2个字节
统一协议下端口不能冲突
设置端口号时尽量越大越好
预留端口号:8000
常见端口号:
80: http
8080: tomcat
1521: Oracle
3306: mysql
InetSocketAddress 此类实现 IP 套接字地址(IP 地址 + 端口号)。
URL:统一资源定位符 区分不同的资源
互联网的三大基石: http html url
协议:
域名:
端口:
资源:
http://www.baidu.com:80/index.html?name=zhangsan&pwd=123#a
传输协议***: udp tcp*****
udp
Socket套接字:传输层为应用层开辟的通道(小口子)
不同的协议针对于Socket的实现是不同的
传输层协议之间的区别:
tcp: 相当于打电话 基于面向连接的 安全 基于io流传输 占用资源多,开销大,效率低 3次握手:1.请求 2.回应 3.传输
udp: 相当于写信 非面向连接的 只管发送 不安全 开销小,效率高 大小有限制 一般不超过60k 基于字节数组
UDP实现Socket编程:
DatagramSocket:定义发送端和接收端
DatagramPacket:数据的包裹
udp实现发送端:基本流程
1.DatagramSocket 指定端口 定义发送端 DatagramSocket(int port)
2.准备数据 ,转为字节数组
3.DatagramPacket 打包
4.发送 void send(DatagramPacket p) 从此套接字发送数据报包。
5.关闭资源
代码实例:
public class UdpTest {
public static void main(String[] args) throws IOException {
System.out.println("发送端准备就绪");
//定义发送端口
DatagramSocket send=new DatagramSocket(9999);
//准备数据,由于基于字节数组,所以传输的内容要转为字节数组
String str="udp一号准备发送";
byte[] arr=str.getBytes();
//准备报过打包
InetAddress in1=InetAddress.getLocalHost();
DatagramPacket packet=new DatagramPacket(arr, 0,arr.length,new InetSocketAddress("in1", 9999));
//发送
send.send(packet);
//关闭
send.close();
}
}
public class UdpReceive {
public static void main(String[] args) throws IOException {
System.out.println("接收端准备就绪");
//定义接收端
DatagramSocket rec=new DatagramSocket(9999);
//准备字节数组进行打包
byte[] brr=new byte[1024*80];
//打包
DatagramPacket packet=new DatagramPacket(brr,0, brr.length);
//接受
rec.receive(packet);
//处理数据
byte[] newBrr=packet.getData();
System.out.println(newBrr.length);
System.out.println(packet.getLength());
System.out.println(new String(newBrr,0,packet.getLength()));
//关闭
rec.close();
}
}
tcp
1.tcp实现客户端:基本流程
1.定义客户端 Socket 指定服务端的ip 端口
2.准备数据
3.通过io读写
4.关闭
2.tcp实现服务端:基本流程
1.定义服务端 ServerSocket
2.阻塞式监听
3.通过io读写
4.关闭
代码实例:
public class TcpTest {
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("----------客户端--------");
Socket client=new Socket("localhost", 8888);
String str="哈哈";
DataOutputStream dos=new DataOutputStream(new BufferedOutputStream(client.getOutputStream()));
dos.writeUTF(str);
dos.flush();
dos.close();
client.close();
}
}
public class ServerTcpTest {
public static void main(String[] args) throws IOException {
System.out.println("---服务端----");
//定义服务器端
ServerSocket server=new ServerSocket(8888);
//监听
Socket client=server.accept();
System.out.println("---监听成功-----");
DataInputStream dis=new DataInputStream(new BufferedInputStream(client.getInputStream()));
dis.readUTF();
}
}