TCP&UDP编程
2024年11月17日大约 3 分钟
InetAddress 代表IP地址
常用方法
名称 | 说明 |
---|---|
getLoaclHost() | 获取本机IP,返回inerAddress对象(静态) |
getByName(String) | 根据ip | 域名返回inetAddress对象(静态) |
getHostName() | 获取IP地址对象的主机名 |
getHostAddress() | 获取IP地址对象的地址信息 |
isReachable(int) | 在指定的毫秒内,判断主机与IP是否能联通 |
UDP - 发送&接收
DatagramSocket
用于创建客户端和服务端
构造 | 说明 |
---|---|
DatagramSocket() | 创建客户端socket对象,随机分配端口号 |
DatagramSocket(int) | 创建服务端socket对象,指定端口号 |
发送、接收
方法 | 说明 |
---|---|
send(DatagramPacket) | 发送数据包 |
receive(DatagramPacket) | 接收数据包 |
DatagramPacket 创建数据包
构造 | 说明 |
---|---|
DatagramPacket(byte[],int,InetAddress,int) | 创建发出数据包对象 |
DatagramPacket(bytep[],int) | 创建接收数据包对象 |
发出数据对象包参数:
- 封装要发出的数据
- 要发出的数据大小
- 服务器IP
- 服务器端口
接收数据包参数:
- 接收数据包的大小(数据包最大不超过64kb)
- 数据包的大小
可以使用
getLength()
获取发送了多少信息
获取客户端信息
packet.getAddress().getHostName(); // 获取客户端主机名
packet.getAddress().getHostAddress(); // 获取客户端IP
packet.getPort(); // 获取客户端端口
使用
while
死循环包围(发送|接收)的程序
TCP - 通信
客户端
Socket
实现客户端TCP
构造 | 说明 |
---|---|
Socket(String,int) | 跟还有指定的IP、端口与服务端建立连接、连接通过就获得客户端Socket |
方法 | 说明 |
---|---|
getOutputStream() | 获得字节输出流对象 |
getInputStream() | 获得字节输入流对象 |
服务端
ServerSocket
实现服务端TCP
构造 | 说明 |
---|---|
ServerSocket(int) | 为服务程序注册端口 |
方法 | 说明 |
---|---|
accept() | 阻塞等待客户端的连接请求,一旦与某个客户端成功连接,则返回服务端这边的Socket对象 |
getRemoteSocketAddress()
通过这个方法可以获取客户端的IP信息多收&多发:使用
while
循环包围发送 | 接收(I|O)的内容连接成功后,客户端单方面退出连接后服务端也会输出异常并退出
服务端 1 — * 客户端
TCP解决单服务器与多客户端的发送信息问题
解决方法:使用多线程
public class ServerReaderThead extends Thread {
private Socket socket;
public ServerReaderThead(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
System.out.println("客户端" + socket.getRemoteSocketAddress() + "上线");
DataInputStream dataInputStream = null;
try {
dataInputStream = new DataInputStream(socket.getInputStream());
} catch (IOException e) {
throw new RuntimeException(e);
}
while (true) {
try {
String s = dataInputStream.readUTF();
System.out.println(s);
System.out.println(socket.getRemoteSocketAddress());
System.out.println("____________________________________");
} catch (IOException e) {
System.out.println("客户端" + socket.getRemoteSocketAddress() + "单方面退出");
break;
}
}
}
}
UDP、 TCP
UDP 用户数据报协议
特点:无连接、不可靠通信、效率高
不事先建立连接,数据按照包发(最大64kb),一包数据包含:自己的IP、程序端口、目的地IP、程序端口和数据
适合持续传输的业务
TCP 传输控制协议
特点:面向连接、可靠通信、效率低
保证在不可靠的信道上,实现可靠的传输
通过三次握手进行连接,通过四次挥手进行断开连接