server

  1. public class TCPServer {
  2. public static void main(String[] args) throws Exception {
  3. //创建socket,并将socket绑定到65000端口
  4. ServerSocket ss = new ServerSocket(65000);
  5. //死循环,使得socket一直等待并处理客户端发送过来的请求
  6. while (true) {
  7. //监听65000端口,直到客户端返回连接信息后才返回
  8. Socket socket = ss.accept();
  9. //获取客户端的请求信息后,执行相关业务逻辑
  10. new LengthCalculator(socket).start();
  11. }
  12. }
  13. }

client

  1. public class TCPClient {
  2. public static void main(String[] args) throws Exception {
  3. //创建socket,并指定连接的是本机的端口号为65000的服务器socket
  4. Socket socket = new Socket("127.0.0.1", 65000);
  5. //获取输出流
  6. OutputStream os = socket.getOutputStream();
  7. //获取输入流
  8. InputStream is = socket.getInputStream();
  9. //将要传递给server的字符串参数转换成byte数组,并将数组写入到输出流中
  10. os.write(new String("hello world").getBytes());
  11. int ch = 0;
  12. byte[] buff = new byte[1024];
  13. //buff主要用来读取输入的内容,存成byte数组,ch主要用来获取读取数组的长度
  14. ch = is.read(buff);
  15. //将接收流的byte数组转换成字符串,这里是从服务端回发回来的字符串参数的长度
  16. String content = new String(buff, 0, ch);
  17. System.out.println(content);
  18. //不要忘记关闭输入输出流以及socket
  19. is.close();
  20. os.close();
  21. socket.close();
  22. }
  23. }

LengthCalculator

  1. public class LengthCalculator extends Thread {
  2. //以socket为成员变量
  3. private Socket socket;
  4. public LengthCalculator(Socket socket) {
  5. this.socket = socket;
  6. }
  7. @Override
  8. public void run() {
  9. try {
  10. //获取socket的输出流
  11. OutputStream os = socket.getOutputStream();
  12. //获取socket的输入流
  13. InputStream is = socket.getInputStream();
  14. int ch = 0;
  15. byte[] buff = new byte[1024];
  16. //buff主要用来读取输入的内容,存成byte数组,ch主要用来获取读取数组的长度
  17. ch = is.read(buff);
  18. //将接收流的byte数组转换成字符串,这里获取的内容是客户端发送过来的字符串参数
  19. String content = new String(buff, 0, ch);
  20. System.out.println(content);
  21. //往输出流里写入获得的字符串的长度,回发给客户端
  22. os.write(String.valueOf(content.length()).getBytes());
  23. //不要忘记关闭输入输出流以及socket
  24. is.close();
  25. os.close();
  26. socket.close();
  27. } catch (IOException e) {
  28. e.printStackTrace();
  29. }
  30. }
  31. }