Java TCP ECHO服务器客户端[CODE]

秒速五厘米 2022-03-29 04:56 316阅读 0赞

EchoClient.java

  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStreamWriter;
  6. import java.io.PrintWriter;
  7. import java.net.Socket;
  8. import java.net.UnknownHostException;
  9. public class EchoClient {
  10. public static void main(String args[]){
  11. String hostname = "localhost";
  12. if(args.length > 0){
  13. hostname = args[0];
  14. }
  15. //定义一系列的变量
  16. PrintWriter out = null; //用于向网络写数据
  17. BufferedReader in = null; //用于向网络读数据
  18. Socket socket = null;
  19. BufferedReader userIn = null; //用于获取键盘输入
  20. try {
  21. //实例化相应的变量
  22. socket = new Socket(hostname,9998);
  23. in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  24. out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
  25. userIn = new BufferedReader(new InputStreamReader(System.in));
  26. System.out.println("connect to echo Server" + hostname);
  27. while(true){
  28. String theLine = userIn.readLine();
  29. if(theLine.equals(".")){
  30. break;
  31. }
  32. out.println(theLine);
  33. System.out.println(in.readLine());
  34. }
  35. } catch (UnknownHostException e) {
  36. // TODO Auto-generated catch block
  37. e.printStackTrace();
  38. } catch (IOException e) {
  39. // TODO Auto-generated catch block
  40. e.printStackTrace();
  41. }
  42. try {
  43. in.close();
  44. socket.close();
  45. } catch (IOException e) {
  46. // TODO Auto-generated catch block
  47. e.printStackTrace();
  48. }
  49. out.close();
  50. }
  51. }

EchoServer.java

  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStreamWriter;
  6. import java.io.PrintWriter;
  7. import java.net.ServerSocket;
  8. import java.net.Socket;
  9. public class EchoServer {
  10. @SuppressWarnings("null")
  11. public static void main(String args[]){
  12. //首先定义四个变量
  13. ServerSocket serversocket = null; //用于创建TCP服务器
  14. Socket socket = null; //用于获得连接套接字
  15. BufferedReader in = null; //用于接收数据
  16. PrintWriter out = null; //用于发送数据
  17. //在网络编程中读取和发送相应的网络数据都需要自己的IO变量
  18. try {
  19. serversocket = new ServerSocket(9998); //实例化监听套接字,绑定端口9998
  20. while(true){
  21. //打印帮助消息
  22. //这里将会打印IP地址和端口相关的信息
  23. System.out.println("The Server is start:" +serversocket);
  24. //等待客户端连接,连接成功之后,返回一个socket类型的变量,所有的数据传输都是和socket进行.
  25. socket = serversocket.accept();
  26. //打印客户端的相关消息
  27. System.out.println("Accept the Client:" + socket);
  28. //实例化BufferedReader 对象用于接收客户端发送来的消息
  29. //InputStreamReader的作用是将字节流转换成为字符流
  30. //从网络中得到的数据将会存放在inBuffer变量当中
  31. in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  32. //得到输出流
  33. out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
  34. //通过上面的工作,我对网络的读写操作都准备好了
  35. while(true){
  36. String instr = in.readLine(); //按行读取数据
  37. if(instr == null){
  38. break; //当客户端关闭时跳出循环
  39. }
  40. System.out.println("In server received the info:" + instr);//打印获得的数据
  41. out.println(instr);//将从网络中得到的数据回写
  42. }
  43. }
  44. } catch (IOException e) {
  45. // TODO Auto-generated catch block
  46. e.printStackTrace();
  47. }
  48. try {
  49. socket.close();
  50. serversocket.close();
  51. in.close();
  52. } catch (IOException e) {
  53. // TODO Auto-generated catch block
  54. e.printStackTrace();
  55. }
  56. out.close();
  57. System.out.println("Server is exit");
  58. }
  59. }

发表评论

表情:
评论列表 (有 0 条评论,316人围观)

还没有评论,来说两句吧...

相关阅读