• 多线程和网路编程写的客户端和服务端的交流


    客户端

    1. Socket socket = new Socket("127.0.0.1", 10001);
    2. Scanner sc = new Scanner(System.in);

    Socket用于接收或输出数据,指定ip地址和端口

    1. while (true) {
    2. // 从连接通道中获取输出流
    3. OutputStream os = socket.getOutputStream();
    4. // 写出数据
    5. System.out.print("请输入要发送的消息 (输入exit退出): ");
    6. String str = sc.nextLine();
    7. if ("exit".equalsIgnoreCase(str)) {
    8. break; // 用户输入exit,退出循环
    9. }
    10. os.write(str.getBytes());
    11. //清空缓冲区域
    12. os.flush();
    13. }

    具体功能:可以输入多句语句;

    首先创建一个' Socket '对象并将其连接到端口“127.0.0.1”的服务器10001。然后用Scanner从用户那里读取输入。用循环从套接字获取输出流,允许它向服务器发送数据。提示用户输入消息。如果用户键入“exit”,则循环中断,套接字关闭。否则,它将用户的输入消息转换为字节,并通过写入输出流将其发送到服务器。' os.flush()方法用于确保立即发送数据而不是缓冲数据。

    服务端

    1. // 从连接通道中获取输入流读取数据(使用字符编码UTF-8
    2. try (InputStream is = socket.getInputStream();
    3. InputStreamReader isr = new InputStreamReader(is, "UTF-8");
    4. BufferedReader reader = new BufferedReader(isr)) {
    5. int b;
    6. while ((b = reader.read()) != -1) {
    7. System.out.print((char) b);
    8. }

    接收到来自客户端的字符流,然后转化为字节流,然后利用缓冲流进行输出

    1. ServerSocket ss = new ServerSocket(10001);
    2. //监听客户端的链接
    3. while(true){
    4. Socket socket = ss.accept();
    5. new Thread(new MyRun(socket)).start();
    6. }

    accept等待收到来自客户端的信息,然后通过多线程的方式实现多个客户端同时对接

    完整代码

    客户端

    1. package com.ln2;
    2. import java.io.IOException;
    3. import java.io.OutputStream;
    4. import java.net.Socket;
    5. import java.util.Scanner;
    6. public class Client {
    7. public static void main(String[] args) throws IOException {
    8. try {
    9. Socket socket = new Socket("127.0.0.1", 10001);
    10. Scanner sc = new Scanner(System.in);
    11. while (true) {
    12. // 从连接通道中获取输出流
    13. OutputStream os = socket.getOutputStream();
    14. // 写出数据
    15. System.out.print("请输入要发送的消息 (输入exit退出): ");
    16. String str = sc.nextLine();
    17. if ("exit".equalsIgnoreCase(str)) {
    18. break; // 用户输入exit,退出循环
    19. }
    20. os.write(str.getBytes());
    21. //清空缓冲区域
    22. os.flush();
    23. }
    24. // 关闭
    25. socket.close();
    26. } catch (IOException e) {
    27. e.printStackTrace();
    28. }
    29. }
    30. }

    服务端

    1. package com.ln1;
    2. import java.io.BufferedReader;
    3. import java.io.IOException;
    4. import java.io.InputStream;
    5. import java.io.InputStreamReader;
    6. import java.net.Socket;
    7. public class MyRun implements Runnable {
    8. Socket socket;
    9. public MyRun(Socket soket) {
    10. this.socket = soket;
    11. }
    12. @Override
    13. public void run() {
    14. try {
    15. // 从连接通道中获取输入流读取数据(使用字符编码UTF-8)
    16. try (InputStream is = socket.getInputStream();
    17. InputStreamReader isr = new InputStreamReader(is, "UTF-8");
    18. BufferedReader reader = new BufferedReader(isr)) {
    19. int b;
    20. while ((b = reader.read()) != -1) {
    21. System.out.print((char) b);
    22. }
    23. } catch (IOException e) {
    24. e.printStackTrace();
    25. }
    26. // 关闭客户端连接
    27. socket.close();
    28. } catch (IOException e) {
    29. e.printStackTrace();
    30. }
    31. }
    32. }

    MyRun类被设计成一个可运行的任务。它接受一个' Socket '对象作为构造函数参数,表示此任务将处理的客户端套接字。使用UTF-8编码用于基于字符的读取。' BufferedReader'用于从输入流中读取字符。它读取字符,直到到达流的末尾,并在读取时将每个字符打印到控制台中。意味着在一个单独的线程中执行,以同时处理服务器应用程序中的多个客户端。

    1. package com.ln1;
    2. import java.io.*;
    3. import java.net.ServerSocket;
    4. import java.net.Socket;
    5. public class Server {
    6. public static void main(String[] args) throws IOException {
    7. //创建对象SeverSocket
    8. ServerSocket ss = new ServerSocket(10001);
    9. //监听客户端的链接
    10. while(true){
    11. Socket socket = ss.accept();
    12. new Thread(new MyRun(socket)).start();
    13. }
    14. }
    15. }

  • 相关阅读:
    卷妹带你学jdbc---2天冲刺Day2
    亚马逊测评系统是什么,跨境卖家如何通过自己养号来实现快速出单?
    Python爬虫从入门到进阶
    Docker安装Python3教程
    笙默考试管理系统-MyExamTest----codemirror(26)
    Airtest手机APP自动化操作微信
    上万篇笔记总结丨小红书品牌高频投放的12种经典笔记形式
    c高级 day1
    关于iframe的页面加载出现滚动条的问题
    MyBatis-Plus学习笔记
  • 原文地址:https://blog.csdn.net/qq_74455082/article/details/132958131