TCP 协议 的 C/S程序

1.ServerSocket 搭建服务器
2.Socket 搭建客户端
两方使用socket(套接字 , 通信端点) 进行交流

ServerSocket

用于创建服务器 ,创建完毕后, 会绑定一个端口号,然后此服务器可以等待客户端连接 ,每连接一个客户端 , 服务器就会得到一个新的Socket对象, 用于跟客户端进行通信

  1. //构造方法
  2. ServerSocket(int port); ****
  3. 创建一个基于TCP/IP协议的服务器 , 并绑定指定的端口号.
  4. 注意: 参数port的范围是: 0-65535 (建议1025-65535)
  5. //常用方法:
  6. Socket accept(); ****
  7. 等待客户端连接 .
  8. 此方法会导致线程的阻塞!
  9. 直到一个新的客户端连接成功, return Socket对象后, 线程在继续执行.
  10. void close();
  11. 释放占用的端口号 , 关闭服务器.

Socket

是两台计算机之间通信的端点 , 是网络驱动提供给应用程序编程的一种接口 一套标准, 一种机制 .

  1. 构造方法:
  2. Socket(String ip,int port) ****
  3. 创建一个套接字, 并连接指定ip和端口号的 服务器.
  4. 参数1. 服务器的ip地址
  5. 参数2. 服务器软件的端口号..
  6. 常用方法:
  7. - OutputStream getOutputStream();
  8. 返回的是 , 指向通信的另一端点的输出流
  9. - InputStream getInputStream();
  10. 返回的是 , 指向通信的另一端点的输入流
  11. - void close();
  12. 关闭套接字
  13. 注意:
  14. 在网络编程时, 获取输入输出流的操作 ,对于客户端与服务器来说是相对的
  15. 客户端的输入流, 输入的是服务器的输出流 输出的内容.
  16. 客户端的输出流, 输出到了服务器的输入流中.
  17. 所以 在使用时, 需要注意以下一点规则:
  18. 客户端与服务器获取流的顺序必须是相反的:
  19. 例如:
  20. 客户端先得到了输入流 , 那服务器必须先获取输出流

举例:

  1. package com.zmh.net;
  2. import java.io.*;
  3. import java.net.ServerSocket;
  4. import java.net.Socket;
  5. public class Demo {
  6. //服务器
  7. public static void main(String[] args) throws IOException {
  8. ServerSocket server = new ServerSocket(55621);
  9. System.out.println("服务器启动完毕,等待连接");
  10. //等待客户端连接
  11. Socket socket = server.accept();
  12. System.out.println("一个客户端连接了");
  13. //获取一个输出流
  14. OutputStream os = socket.getOutputStream();
  15. //转换成打印流
  16. PrintStream ps = new PrintStream(os);
  17. ps.println("欢迎连接到服务器");
  18. InputStream is = socket.getInputStream();
  19. BufferedReader br = new BufferedReader(new InputStreamReader(is));
  20. System.out.println("我收到你的恢复了!!\n"+br.readLine());
  21. System.out.println("服务器进程结束");
  22. }
  23. }
  24. package com.zmh.net;
  25. import java.io.*;
  26. import java.net.Socket;
  27. public class ClientDemo {
  28. public static void main(String[] args) throws IOException {
  29. Socket socket = new Socket("127.0.0.1", 55621);
  30. InputStream is = socket.getInputStream();
  31. BufferedReader br = new BufferedReader(new InputStreamReader(is));
  32. System.out.println("客户端收到消息:"+br.readLine());
  33. OutputStream os = socket.getOutputStream();
  34. PrintStream ps = new PrintStream(os);
  35. ps.println("我看看你干嘛呢");
  36. }
  37. }