服务器端: TCPServer.java
package com.zhanshen.demo; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; /** * TCP通信的服务器端,接收客户端发的数据 * java.net.ServerSocket * * 构造方法: * ServerSocket(int port) * * 服务器必须明确,必须知道是哪个客户端请求的服务器 * 所以可以使用accept方法获取请求到的客户端对象socket * * 成员方法: * socket accept() 侦听并接收到此套接字的链接 * * 服务器实现步骤: * 1. 创建服务器ServerSocket 对象和系统要制定的端口 * 2. 使用ServerSocket对象中的方法accept 获取请求的客户端对象Socket * 3. 使用Socket对象中的getInputStream 获取网络字节输入流InputStream对象 * 4. 使用网络字节输入流InputStream对象中的方法 read 读取客户端发送的请求 * 5. 使用socket对象中的方法getOutputStream 获取网络字节输出流OutputStream对象 * 6. 使用网络字节输出流 OutputStream对象中的write 来给客户端回写数 * 7. 释放资源 Socket和ServerSocket * */ public class TCPServer { public static void main(String[] args) throws IOException { //1. 创建服务器socket ServerSocket serverSocket = new ServerSocket(8888); //2. 使用ServerSocket对象中的accept方法 获取客户端的socket Socket socket = serverSocket.accept(); //3. 使用Socket对象中的getInputStream 获取网络字节输入流InputStream InputStream inputStream = socket.getInputStream(); //4. 使用网络字节输入流InputStream 对象中的read 获取客户端发送的数据 byte[] bytes = new byte[1024]; int len = inputStream.read(bytes); System.out.println(new java.lang.String(bytes, 0, len)); //5. 使用socket对象中的方法getOutputStream 获取字节输出流 OutputStream outputStream = socket.getOutputStream(); //6. 回写数据 outputStream.write("收到. thank you".getBytes()); //7. 释放资源 socket.close(); serverSocket.close(); } }
客户端: TCPClient.java
package com.zhanshen.demo; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; /** * TCP通讯的客户端,向服务器发送连接请求,给服务器发送数据,读取服务器回写的数据 * 表示客户端的类 java.next.Socket * 套接字: 包含IP地址和端口号的网络单位 * * 构造方法: * Socket(String host, int port) * host: 服务器主机的名名称或者IP * 成员方法: * OutputStream getOutputStream() 返回此套接字的输出流 * InputStream getInputStream() 返回此套接字的输入流 * void close() 关闭套接字 * * 实现步骤: * 1. 创建客户端对象socket 构造方法中绑定服务器的IP地址和端口号 * 2. 使用getOutputStream() 获取网络字节输出流OutputStream对象 * 3. 使用网络字节输出流OutputStream 对象中的方法write , 检查服务器发送数据 * 4. 使用socket对象中的getInputStream 获取网络字节流InputStream对象 * 5. 使用网络字节输入流InputStream对象中的read方法,读取服务器回写的数据 * 6. 释放资源 */ public class TCPClient { public static void main(String[] args) throws IOException { //1.创建一个客户端对象 Socket 构造方法绑定服务器的IP和端口号, 用本地做测试,也可以换成你的服务器IP Socket socket = new Socket("127.0.0.1", 8888); //2.使用Socket对象中的方法OutputStream() 获取网络字节输出流 OutputStream outputStream = socket.getOutputStream(); //3.使用网络字节流OutputStream对象中的方法write 向服务器发送数据 outputStream.write("hello world".getBytes()); //4. InputStream inputStream = socket.getInputStream(); //5 byte[] bytes = new byte[1024]; int len = inputStream.read(bytes); System.out.println(new String(bytes, 0, len)); //6/ socket.close(); } }