java Socket多线程服务器源代码介绍

news/2024/7/7 19:41:57
java Socket多线程服务器源代码介绍


java Socket多线程在我们进行相关学习的时候需要注意不断出现的问题,下面我们就来看看在java Socket多线程中服务器的代码编写。

java Socket多线程需要我们不断的学习,在学习的时候我们就会发现在服务器的配置上有不少的问题。下面我们就来看看服务器源代码是如何编写的,以便大家更好的使用java Socket多线程。

1. import java.io.BufferedReader;
2. import java.io.IOException;
3. import java.io.InputStreamReader;
4. import java.io.PrintWriter;
5. import java.net.ServerSocket;
6. import java.net.Socket;
7. import java.util.ArrayList;
8. import java.util.List;
9. import java.util.concurrent.ExecutorService;
10. import java.util.concurrent.Executors;
11. public class ChatServer {
12. private static final int PORT = 1234; // 端口号
13. private static List<Socket> list = new ArrayList<Socket>();
// 保存连接对象
14. private ExecutorService exec;
15. private ServerSocket server;
16. public static void main(String[] args) {
17. new ChatServer();
18. }
19. public ChatServer() {
20. try {
21. server = new ServerSocket(PORT);
22. exec = Executors.newCachedThreadPool();
23. System.out.println(“服务器已启动!”);
24. Socket client = null;
25. while (true) {
26. client = server.accept(); // 接收客户连接
27. list.add(client);
28. exec.execute(new ChatTask(client));
29. }
30. } catch (IOException e) {
31. e.printStackTrace();
32. }
33. }
34. static class ChatTask implements Runnable {
35. private Socket socket;
36. private BufferedReader br;
37. private PrintWriter pw;
38. private String msg;
39. public ChatTask(Socket socket) throws IOException {
40. this.socket = socket;
41. br = new BufferedReader(new InputStreamReader(socket
42. .getInputStream()));
43. msg = “【” + this.socket.getInetAddress() + “】
进入聊天室!当前聊天室有【”
44. + list.size() + “】人”;
45. sendMessage();
46. }
47. public void run() {
48. try {
49. while ((msg = br.readLine()) != null) {
50. if (msg.trim().equals(“bye”)) {
51. list.remove(socket);
52. br.close();
53. pw.close();
54. msg = “【” + socket.getInetAddress() + “】
离开聊天室!当前聊天室有【”
55. + list.size() + “】人”;
56. socket.close();
57. sendMessage();
58. break;
59. } else {
60. msg = “【” + socket.getInetAddress() + “】说:” + msg;
61. sendMessage();
62. }
63. }
64. } catch (IOException e) {
65. e.printStackTrace();
66. }
67. }
68. /**
69. * 群发消息给聊天室的所有人
70. */
71. private void sendMessage() throws IOException {
72. System.out.println(msg);
73. for (Socket client : list) {
74. pw = new PrintWriter(client.getOutputStream(), true);
75. pw.println(msg);
76. }
77. }
78. }
79. }
80. import java.io.BufferedReader;
81. import java.io.InputStreamReader;
82. import java.io.PrintWriter;
83. import java.net.Socket;
84. import java.util.concurrent.ExecutorService;
85. import java.util.concurrent.Executors;
86. public class ChatClient {
87. private static final int PORT = 7891;
88. private static ExecutorService exec =
Executors.newCachedThreadPool();
89. public static void main(String[] args) throws Exception {
90. new ChatClient();
91. }
92. public ChatClient() {
93. try {
94. Socket socket = new Socket(“221.130.165.41″, PORT);
95. exec.execute(new Sender(socket));
96. System.out.println(“【” + socket.getInetAddress() + “】
您好,欢迎来到简易聊天室!”);
97. BufferedReader br = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
98. String msg;
99. while ((msg = br.readLine()) != null) {
100. System.out.println(“收到—->”+msg);
101. }
102. } catch (Exception e) {
103. }
104. }

http://www.niftyadmin.cn/n/3855209.html

相关文章

Java Socket 编程——多线程网络聊天程序

Java Socket 编程——多线程网络聊天程序 首先&#xff0c;进行服务端的编程&#xff0c;作为服务端&#xff0c;编程主要按下面几个步骤进行&#xff1a;// 1. 创建socketServerSocket ss new ServerSocket(PortNumber);Socket s ss.accept(); //监听器&#xff0c;产生阻塞…

SQL Server 跨服务器 不同数据库之间复制表的数据的方法:

不同数据库之间复制表的数据的方法&#xff1a; 当表目标表存在时&#xff1a; insert into 目的数据库..表 select * from 源数据库..表 当目标表不存在时&#xff1a; select * into 目的数据库..表 from 源数据库..表 --如果在不同的SQL之间: insert into openrowset(sql…

Java多线程-----Socket通信

Java多线程-----Socket通信程序分Server和Client服务器端打开侦听的端口&#xff0c;一有客户端连接就创建两个新的线程来负责这个连接一个负责客户端发送的信息(ClientMsgCollectThread 类)&#xff0c;另一个负责通过该Socket发送数据&#xff08;ServerMsgSendThread &#…

算法学习-哈希表

之前在大学学习数据结构的时候&#xff0c;学过数组和链表。数组的优点就是可以直接定位&#xff0c;速度快&#xff0c;但是缺点就是插入删除&#xff0c;效率就慢了很多。链表的可以快速的插入删除&#xff0c;但是不能直接定位&#xff0c;需要遍历才可以。他们使用在不同的…

改变VM内存大小

-Xms512m -Xmx1024m -XX:PermSize128M -XX:MaxPermSize256M 转载于:https://blog.51cto.com/yaomingkai/1125760

数据库如何处理多对多的关系

数据库设计多对多关系的几种形态&#xff08;7种&#xff09; Posted on 2009-06-09 23:37 peterzb 阅读(739) 评论(1) 编辑 收藏 所属分类: 数据库技术数据库设计多对多关系的几种形态 前言&#xff1a;多对多关系至少需要3个表&#xff0c;我们把一个表叫做主表&#xff0c;一…

iOS: Device token and registerForRemoteNotificationTypes, didReceiveRemoteNotification

分类&#xff1a; Mobile iOS2012-04-18 19:25 244人阅读 评论(0) 收藏 举报Device token for an iPhone device生成之后就永远不变吗&#xff1f; 不是&#xff0c;if a device is wiped (应该是重装系统), it will get a new device token. 官方网站是这样写的&#xff1a; …

Java纯POJO类反射到Redis,反射到MySQL

这个是类定义&#xff0c;都是POJO类&#xff0c;纯数据 以下代码将POJO类反射到REDIS中&#xff0c;采用JSON序列化类数据。 public static <T> T save(T model, String indexName) throws Exception {String modelName model.getClass().getSimpleName();Jedis jedis …