文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java编程Socket如何实现多个客户端连接同一个服务端

2023-05-30 20:30

关注

这篇文章主要介绍Java编程Socket如何实现多个客户端连接同一个服务端,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Java Socket(套接字)通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

使用Socket实现多个客户端和同一客户端通讯;首先客户端连接服务端发送一条消息,服务端接收到消息后进行处理,完成后再回复客户端一条消息。本人通过自己的思维编写了一份服务端和客户端实现的代码,望能与大家相互学习,共同进步。

服务端代码

public class Server {public static void main(String[] args) throws IOException {// 为了简单起见,所有的异常信息都往外抛int port = 8899;// 定义一个ServiceSocket监听在端口8899上ServerSocket server = new ServerSocket(port);System.out.println("等待与客户端建立连接...");while (true) {// server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的Socket socket = server.accept();// 每接收到一个Socket就建立一个新的线程来处理它new Thread(new Task(socket)).start();}// server.close();}static class Task implements Runnable {private Socket socket;public Task(Socket socket) {this.socket = socket;}@Override    public void run() {try {handlerSocket();}catch (Exception e) {e.printStackTrace();}}private void handlerSocket() throws Exception {// 跟客户端建立好连接之后,我们就可以获取socket的InputStream,并从中读取客户端发过来的信息了BufferedReader br = new BufferedReader(          new InputStreamReader(socket.getInputStream(), "UTF-8"));StringBuilder sb = new StringBuilder();String temp;int index;while ((temp = br.readLine()) != null) {if ((index = temp.indexOf("eof")) != -1) {// 遇到eof时就结束接收sb.append(temp.substring(0, index));break;}sb.append(temp);}System.out.println("Form Cliect[port:" + socket.getPort()          + "] 消息内容:" + sb.toString());// 回应一下客户端Writer writer = new OutputStreamWriter(socket.getOutputStream(),          "UTF-8");writer.write(String.format("Hi,%d.天朗气清,惠风和畅!", socket.getPort()));writer.flush();writer.close();System.out.println(          "To Cliect[port:" + socket.getPort() + "] 回复客户端的消息发送成功");br.close();socket.close();}}}

客户端代码

import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.Reader;import java.io.Writer;import java.net.Socket;public class Client {public static void main(String[] args) {// 开启三个客户端,一个线程代表一个客户端 for (int i = 0; i < 3; i++) {new Thread(new Runnable() {@Override public void run() {try {TestClient client = TestClientFactory.createClient();client.send(String.format("Hello,Server!I'm %d.这周末天气如何。", client.client.getLocalPort()));client.receive();}catch (Exception e) {e.printStackTrace();}}}).start();}}static class TestClientFactory {public static TestClient createClient() throws Exception {return new TestClient("127.0.0.1", 8899);}}static class TestClient {public TestClient(String host, int port) throws Exception {// 与服务端建立连接 this.client = new Socket(host, port);System.out.println("Cliect[port:" + client.getLocalPort() + "] 与服务端建立连接...");}private Socket client;private Writer writer;public void send(String msg) throws Exception {// 建立连接后就可以往服务端写数据了 if(writer == null) {writer = new OutputStreamWriter(client.getOutputStream(), "UTF-8");}writer.write(msg);writer.write("eof\n");writer.flush();// 写完后要记得flush System.out.println("Cliect[port:" + client.getLocalPort() + "] 消息发送成功");}public void receive() throws Exception {// 写完以后进行读操作 Reader reader = new InputStreamReader(client.getInputStream(), "UTF-8");// 设置接收数据超时间为10秒 client.setSoTimeout(10*1000);char[] chars = new char[64];int len;StringBuilder sb = new StringBuilder();while ((len = reader.read(chars)) != -1) {sb.append(new String(chars, 0, len));}System.out.println("Cliect[port:" + client.getLocalPort() + "] 消息收到了,内容:" + sb.toString());reader.close();// 关闭连接 writer.close();client.close();}}}

接下来模拟一下:

首先运行服务端

Java编程Socket如何实现多个客户端连接同一个服务端

接着运行客户端(开三个客户端请求)

为了演示有所区分,服务端我使用的是Eclipse工具,客户端使用的是IntelliJ IDEA工具。这时可以看到客户端在控制台打印出来的消息

Java编程Socket如何实现多个客户端连接同一个服务端

一个Port端口号代表一个客户端,回过来看下服务端在控制台打印出来的消息

Java编程Socket如何实现多个客户端连接同一个服务端

以上是“Java编程Socket如何实现多个客户端连接同一个服务端”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯