套接字编程学习

This commit is contained in:
markilue 2022-12-22 20:07:25 +08:00
parent 9c1737f0bf
commit 9dff74dcd8
2 changed files with 160 additions and 0 deletions

View File

@ -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,来了老弟
}
}

View File

@ -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();
/*
---发送方启动中---
服务器收到了
*/
}
}