套接字编程学习
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