一、TCP网络编程
传输控制协议TCP,是一种面向连接的、可靠的、基于字符流传输层通信协议。在正式收发数据前,必须和对方建立可靠的连接。
1.1 客户端
- 创建Socket对象,并将它连接到指定IP的指定端口号。
- 向服务端发送消息。
- 释放资源。
public class Client {
public static void main(String[] args) {
Socket socket = null;
OutputStream outputStream = null;
try {
// 1.创建客户端的socket对象,将它连接到指定IP地址的指定端口号
socket = new Socket("127.0.0.1", 9999);
// 2.向服务端发送数据
outputStream = socket.getOutputStream();
outputStream.write("hello Java".getBytes(StandardCharsets.UTF_8));
} catch (IOException e) {
e.printStackTrace();
} finally {
// 3.释放资源
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
1.2 服务端
- 创建ServerSocket对象,用于监听客户端Socket的连接请求。
- 接受客户端Socket的请求,也对应产生一个Socket。
- 接受客户端的消息。
- 释放资源。
public class Server {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
InputStream inputStream = null;
try {
// 1.创建绑定到指定端口的服务器套接字
serverSocket = new ServerSocket(9999);
// 2.接受客户端的连接,生成socket对象
socket = serverSocket.accept();
// 3.接受来自客户都的数据
inputStream = socket.getInputStream();
byte[] buf = new byte[1024];
int hasRead = inputStream.read(buf);
System.out.println(new String(buf, 0, hasRead));
} catch (IOException e) {
e.printStackTrace();
} finally {
// 4.释放资源
try {
socket.close(); //可省略,ss关闭,s就关闭了
} catch (IOException e) {
e.printStackTrace();
}
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
二、UDP网络编程
用户数据包协议UDP,是面向非连接的协议。它不需要与对方建立连接,而是直接把数据包发送过去。
2.1 客户端
- 创建DatagramSocket对象。
- 创建数据,并打包。
- 发送数据。
- 关闭资源。
public class Client {
public static void main(String[] args) throws IOException {
// 1.创建DatagramSocket对象
DatagramSocket socket = new DatagramSocket();
// 2.创建数据,并打包
byte[] buf = "hello Java".getBytes(StandardCharsets.UTF_8);
DatagramPacket packet = new DatagramPacket(buf,buf.length, InetAddress.getByName("127.0.0.1"),10000);
// 3.发送数据
socket.send(packet);
// 4.关闭资源
socket.close();
}
}
2.2 服务端
- 创建DatagramSocket对象。
- 创建一个数据包,用于接收数据。
- 接收数据。
- 关闭资源。
public class Server {
public static void main(String[] args) throws IOException {
// 1.创建DatagramSocket对象
DatagramSocket socket = new DatagramSocket(10000);
// 2.创建一个数据包,用于接收数据
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf,buf.length);
// 3.接收数据
socket.receive(packet);
String dataStr = new String(packet.getData(),0,packet.getLength());
System.out.println(dataStr);
// 4.关闭资源
socket.close();
}
}