套接字编程学习
This commit is contained in:
parent
9c1737f0bf
commit
9dff74dcd8
|
|
@ -0,0 +1,84 @@
|
|||
package com.markilue.java_learning.network;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.PrintStream;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
|
||||
/**
|
||||
*@BelongsProject: java_learning
|
||||
*@BelongsPackage: com.markilue.java_learning.network
|
||||
*@Author: dingjiawen
|
||||
*@CreateTime: 2022-12-22 18:54
|
||||
*@Description: TODO TCP套接字通信编程实例
|
||||
*@Version: 1.0
|
||||
*/
|
||||
public class TCPServer {
|
||||
|
||||
//服务端代码
|
||||
public static void main(String[] args) throws IOException {
|
||||
//创建一个ServerSocket,用于监听客户端的连接请求
|
||||
ServerSocket serverSocket = new ServerSocket();
|
||||
//绑定一个地址和端口,此后通过这个地址和端口监听客户端的请求
|
||||
serverSocket.bind(new InetSocketAddress("127.0.0.1",8000));
|
||||
|
||||
//循环不断接受来自客户端的连接
|
||||
while (true){
|
||||
System.out.println("创建好了连接,等待客户端");
|
||||
//接收到了客户端的连接
|
||||
Socket socket = serverSocket.accept();
|
||||
System.out.println("收到客户端请求并接受");
|
||||
//io流交互通信
|
||||
PrintStream printStream = new PrintStream(socket.getOutputStream(), true, "UTF-8");
|
||||
printStream.println("服务器说:"+socket.getInetAddress()+",来了老弟");
|
||||
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
|
||||
System.out.println("收到来自客户端的信息:"+in.readLine());
|
||||
System.out.println("接受完毕,准备关闭监听");
|
||||
//关闭
|
||||
printStream.close();
|
||||
in.close();
|
||||
socket.close();
|
||||
// break;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
打印结果:
|
||||
创建好了连接,等待客户端
|
||||
收到客户端请求并接受
|
||||
收到来自客户端的信息:客户端向您问好
|
||||
接受完毕,准备关闭监听
|
||||
创建好了连接,等待客户端
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//TCP客户端
|
||||
class TCPClient{
|
||||
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
//创建一个Socket,向服务器发出连接请求
|
||||
Socket socket = new Socket();
|
||||
socket.connect(new InetSocketAddress("127.0.0.1",8000));//连接指定端口
|
||||
|
||||
//IO流交互通信
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
|
||||
System.out.println("来自服务器端的信息:"+reader.readLine());
|
||||
//向服务器写数据
|
||||
PrintStream ps = new PrintStream(socket.getOutputStream(), true, "UTF-8");
|
||||
ps.println("客户端向您问好");
|
||||
|
||||
//关闭连接
|
||||
reader.close();
|
||||
socket.close();
|
||||
//打印结果:来自服务器端的信息:服务器说:/127.0.0.1,来了老弟
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
package com.markilue.java_learning.network;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.DatagramPacket;
|
||||
import java.net.DatagramSocket;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.SocketException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
/**
|
||||
*@BelongsProject: java_learning
|
||||
*@BelongsPackage: com.markilue.java_learning.network
|
||||
*@Author: dingjiawen
|
||||
*@CreateTime: 2022-12-22 19:15
|
||||
*@Description: TODO UDP套接字通信
|
||||
*@Version: 1.0
|
||||
*/
|
||||
public class UDPServer {
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
System.out.println("---接收方启动中---");
|
||||
//1.使用DatagramSocket指定端口 创建接收端
|
||||
DatagramSocket server = new DatagramSocket(8000);
|
||||
//2.准备容器 封装成DatagramPacket包裹
|
||||
byte[] container = new byte[1024 * 60];
|
||||
DatagramPacket packet = new DatagramPacket(container, 0, container.length);
|
||||
//3.阻塞式接受包裹receive(DatagramPacket p)
|
||||
server.receive(packet);
|
||||
//4.分析数据 byte[] getData() getLength()
|
||||
byte[] data = packet.getData();
|
||||
int length = packet.getLength();
|
||||
//操作获取到的数据
|
||||
System.out.println(new String(data,0,length));
|
||||
//返回给客户端信息
|
||||
packet.setData("服务器收到了".getBytes());
|
||||
server.send(packet);
|
||||
//5.释放资源
|
||||
server.close();
|
||||
|
||||
/*
|
||||
---接收方启动中---
|
||||
客户端发送请求
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class UDPClient{
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
System.out.println("---发送方启动中---");
|
||||
//1.使用DatagramSocket指定端口 创建发送端
|
||||
DatagramSocket client = new DatagramSocket(8888);
|
||||
//2.准备一定数据,并转为字节数组
|
||||
String data="客户端发送请求";
|
||||
byte[] datas = data.getBytes();
|
||||
//3.封装成DatagramPacket包裹,需要指定目的地
|
||||
//传入参数为 (数据集,数据初始位置即0,,数据长度,接收端对象(接收端地址,接收端端口))
|
||||
DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress("localhost", 8000));
|
||||
|
||||
//4.发送send(DatagramPacket p)
|
||||
client.send(packet);
|
||||
//接受服务器返回的消息
|
||||
client.receive(packet);
|
||||
//操作获取到的数据
|
||||
System.out.println(new String(packet.getData(),0,packet.getLength()));
|
||||
//5.释放资源
|
||||
client.close();
|
||||
|
||||
/*
|
||||
---发送方启动中---
|
||||
服务器收到了
|
||||
*/
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue