package network;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
/**
* TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,从而在通信的两端形成网络虚拟链路,一旦建立了虚拟的网络链路,两端的程序就可以通过该链路通信
*
* Java对于基于TCP协议的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信
* Java为客户端提供了 Socket类 ,为服务端提供了ServerSocket类
*/
public class TcpDemo {
public static void main(String[] args) {
}
/**
* 服务端:
* 1、创建服务器端的Socket对象(ServerSocket)
* 2、获取输入流,读数据,并把数据显示在控制台
* 3、释放资源
*/
public static void server() throws IOException {
//创建服务器端的Socket对象(ServerSocket)
//ServerSocket(int port) 创建绑定到指定端口的服务器套接字
ServerSocket serverSocket = new ServerSocket(10086);
//accept() 侦听要连接到此套接字并接受它
Socket accept = serverSocket.accept();
//获取输入流
InputStream is = accept.getInputStream();
byte[] bys = new byte[1024];
int read = is.read(bys);
String s = new String(bys, 0, read);
System.out.println(s);
//回复客户端
OutputStream os = accept.getOutputStream();
os.write("收到了你的来信".getBytes(StandardCharsets.UTF_8));
}
/**
* 客户端:
* 1、创建客户端的Socket对象(Socket)
* 2、获取输出流,写数据
* 3、释放资源
*/
public static void client() throws IOException {
//创建客户端的Socket
//Socket(InetAddress address, int port) 创建流套接字并将其连接到指定IP地址的指定端口号。
Socket socket = new Socket("192.168.3.14",10086);
//获取输出流,写数据(发送到服务端)
OutputStream outputStream = socket.getOutputStream();
outputStream.write("你好,TCP".getBytes(StandardCharsets.UTF_8));
//读取服务端回复数据
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int read = inputStream.read(bytes);
String s = new String(bytes, 0, read);
System.out.println(s);
//关闭资源
socket.close();
}
}