server
public class TCPServer { public static void main(String[] args) throws Exception { //创建socket,并将socket绑定到65000端口 ServerSocket ss = new ServerSocket(65000); //死循环,使得socket一直等待并处理客户端发送过来的请求 while (true) { //监听65000端口,直到客户端返回连接信息后才返回 Socket socket = ss.accept(); //获取客户端的请求信息后,执行相关业务逻辑 new LengthCalculator(socket).start(); } }}
client
public class TCPClient { public static void main(String[] args) throws Exception { //创建socket,并指定连接的是本机的端口号为65000的服务器socket Socket socket = new Socket("127.0.0.1", 65000); //获取输出流 OutputStream os = socket.getOutputStream(); //获取输入流 InputStream is = socket.getInputStream(); //将要传递给server的字符串参数转换成byte数组,并将数组写入到输出流中 os.write(new String("hello world").getBytes()); int ch = 0; byte[] buff = new byte[1024]; //buff主要用来读取输入的内容,存成byte数组,ch主要用来获取读取数组的长度 ch = is.read(buff); //将接收流的byte数组转换成字符串,这里是从服务端回发回来的字符串参数的长度 String content = new String(buff, 0, ch); System.out.println(content); //不要忘记关闭输入输出流以及socket is.close(); os.close(); socket.close(); }}
LengthCalculator
public class LengthCalculator extends Thread { //以socket为成员变量 private Socket socket; public LengthCalculator(Socket socket) { this.socket = socket; } @Override public void run() { try { //获取socket的输出流 OutputStream os = socket.getOutputStream(); //获取socket的输入流 InputStream is = socket.getInputStream(); int ch = 0; byte[] buff = new byte[1024]; //buff主要用来读取输入的内容,存成byte数组,ch主要用来获取读取数组的长度 ch = is.read(buff); //将接收流的byte数组转换成字符串,这里获取的内容是客户端发送过来的字符串参数 String content = new String(buff, 0, ch); System.out.println(content); //往输出流里写入获得的字符串的长度,回发给客户端 os.write(String.valueOf(content.length()).getBytes()); //不要忘记关闭输入输出流以及socket is.close(); os.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } }}