java socket如何实现多线程通信

在Java中,可以通过多线程来实现Socket通信。下面是一个简单的示例代码,演示了如何使用多线程实现Socket通信:import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Se

在Java中,可以通过多线程来实现Socket通信。下面是一个简单的示例代码,演示了如何使用多线程实现Socket通信:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class MultiThreadedServer {

    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(12345);
            System.out.println("Server started. Listening for connections on port 12345...");

            while (true) {
                Socket clientSocket = serverSocket.accept();
                System.out.println("Connection received from " + clientSocket.getInetAddress().getHostAddress());

                ClientHandler clientHandler = new ClientHandler(clientSocket);
                Thread clientThread = new Thread(clientHandler);
                clientThread.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (serverSocket != null) {
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    static class ClientHandler implements Runnable {
        private Socket clientSocket;

        public ClientHandler(Socket clientSocket) {
            this.clientSocket = clientSocket;
        }

        @Override
        public void run() {
            try (
                    BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                    PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
            ) {
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    System.out.println("Received from client: " + inputLine);
                    out.println("Server received: " + inputLine);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

在这个示例中,ServerSocket在端口12345上监听客户端连接。一旦有连接建立,就会创建一个新的ClientHandler线程来处理该连接。ClientHandler类实现了Runnable接口,用于处理客户端的输入和输出。

在ClientHandler线程中,我们创建了一个BufferedReader来读取客户端发送的消息,并通过PrintWriter来向客户端发送消息。循环读取客户端发送的消息,直到客户端关闭连接。

这样,通过多线程的方式,我们可以实现Socket通信,并同时处理多个客户端的连接。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/1083871.html

(0)
派派
上一篇 2024-06-27
下一篇 2024-06-27

相关推荐

  • matlab二值化阈值的方法是什么

    在MATLAB中,可以使用imbinarize函数来对图像进行二值化处理。imbinarize函数接受图像和阈值作为输入参数,将图像中大于阈值的像素值设为1,小于等于阈值的像素值设为0,从而将图像转换为二值图像。除了imbinarize函数,还可以使用graythresh函数来自动计算二值化的阈值。graythresh函数接受图像作为输入参数,会自动计算出最佳的二值化阈值,并返回给用户。

    2024-02-18
    0
  • 「企业网络推广怎么做」企业如何做好网络推广

    企业网络推广怎么做,企业如何做好网络推广内容导航:企业如何才能做好网络推广怎样做好企业网络推广企业网络推广怎么做企业怎样做网络推广一、企业如何才能做好网络推广企业要做好网络推广有5个步骤:1、利用免费和付费推广,在互联网上进行推广,做好SEO优化,让目标关键词免费排名在搜索引擎首页,让客户无论在PC端还是移动端都能够找到你

    2022-05-10
    0
  • Pillow怎么处理和优化大尺寸图像的读取和显示

    处理和优化大尺寸图像的读取和显示通常需要考虑以下几个方面:图像压缩:对大尺寸图像进行压缩可以减小文件大小,提高加载速度。可以使用如JPEG、PNG等格式进行压缩。在Pillow中可以使用Image.save()方法来保存压缩后的图像。图像裁剪:如果只需要显示图像的一部分,可以先对图像进行裁剪,减小图像尺寸。在Pillow中可以使用Image.crop()方法来裁剪图像。图像缩放:将大尺寸图像缩小到

    2024-05-23
    0
  • 什么是网站建设和维护(什么是网站建设与维护)

    什么是网站建设和维护,什么是网站建设与维护内容导航:网站建设和维护主要包含了哪些方面的工作“网站建设与维护”学些什么教些什么网站建设网站维护怎么做什么是网站建设一、网站建设和维护主要包含了哪些方面的工作1,坚持更新

    2022-04-26
    0
  • ps如何做剪影效果(用ps怎么做剪影)

    ps如何做剪影效果,用ps怎么做剪影内容导航:怎样用PS滤镜制作剪影效果怎么做这中建筑的剪影效果如何利用ps将人物照片制作成剪影效果怎样把照片ps成剪影效果一、怎样用PS滤镜制作剪影效果1、Photoshop打开图片。2、打开图片后,点击左侧工具栏中的魔棒工具。3、点击魔棒工具后,把人物都载入选区,按住Shift可以连选。4、把人物载入选区后,按Ctrl+J把人物都抠出来。5、把人物

    2022-04-17
    0
  • 如何查看dedecms版本(dedecms更新)

    如何查看dedecms版本,dedecms更新 内容导航: 怎么看自己的织梦版本是gbk还是 utf dede数据库版本怎么看 dedecms 怎么访问 这是 织梦哪个版本的后台 …

    2022-08-29
    0

发表回复

登录后才能评论