一、TCP和UDP的区别
- | TCP | UDP |
---|---|---|
是否连接 | 面向连接 | 面向无连接 |
传输可靠性 | 可靠 | 不可靠 |
应用场合 | 少量数据 | 传输大量数据 |
速度 | 慢 | 快 |
二、URL统一资源定位器
URL u = new (“http://www.baidu.com”);
方法:
- 协议:
getProtocol()
- 域名:
getHost()
- 端口:
getPort()
- 文件:
getFile()
- 查询数据:
getQuery()
- 锚点:
getRef()
三、ip,端口
使用InetAddress
定义ip,使用InetSocketAddress("IP 地址" , 端口号)
表示端口
方法:
static InetAddress getLocalHost()
返回本地主机。static InetAddress getByName(String host)
在给定主机名的情况下确定主机的 IP 地址。String getHostAddress()
返回 IP 地址字符串(以文本表现形式)。String getHostName()
获取此 IP 地址的主机名。
四、UDP
DatagramSocket
:定义发送端和接收端
DatagramPacket
:打包
发送端:
- 定义发送端:
DatagramSocket(int port)
- 准备数据,转为字节数组
- 打包
- 发送
- 关闭
public class UDPClient01 {
public static void main(String[] args) throws IOException {
System.out.println("---------我是发送端----------");
//1.定义发送端
DatagramSocket client = new DatagramSocket(8888);
//2.准备数据
String str = "新建";
byte[] arr = str.getBytes();
//3.打包
DatagramPacket packet = new DatagramPacket(arr, 0,arr.length,new InetSocketAddress("127.0.0.1",9999));
//4.发送void send(DatagramPacket p)
client.send(packet);
//5.关闭
client.close();
}
}
接收端
- 定义接收接收端
- 准备字节数组,用来打包包裹接收数据
- 接收包裹
- 操作数据
- 关闭
public class UDPReceive02 {
public static void main(String[] args) throws IOException{
System.out.println("---------我是接收端----------");
//1.接收端
DatagramSocket server = new DatagramSocket(9999);
//2.准备字节数组,用来打包包裹接收数据
byte[] arr = new byte[1024*60];
DatagramPacket packet = new DatagramPacket(arr,arr.length);
//3.接收
server.receive(packet);
//4.操作数据
System.out.println(packet.getData().length);//整个包的长度:61440
System.out.println(packet.getLength());//数据的长度:4
System.out.println(new String(packet.getData(),0,packet.getLength()));//以字符串输出:新建
//5.关闭
server.close();
}
}
五、TCP
客户端
- 定义客户端
- 定义数据
- 获取输入流
- 关闭
public class TCPClient01 {
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("-----------我是客户端-----------");
//1.客户端
Socket client = new Socket("localhost",9999);
//2.数据
String str = "好啊好啊";
//3.获取输入流
DataOutputStream out = new DataOutputStream(client.getOutputStream());
out.writeUTF(str);
out.flush();
//4.关闭
out.close();
client.close();
}
}
服务端
- 定义服务端
- 阻塞式监听
- IO操作
- 关闭
public class TCPServer02 {
public static void main(String[] args) throws IOException {
System.out.println("--------------我是服务端----------------");
//1.定义服务端
ServerSocket server = new ServerSocket(9999);
//2.阻塞式监听:一个客户端就是一个socket
Socket client = server.accept();
//3.IO操作
DataInputStream is = new DataInputStream(client.getInputStream());
String str = is.readUTF();
System.out.println(str);//输入:好啊好啊
//4.关闭
is.close();
client.close();
server.close();
}
}