教育路上

全国站>Java>网络编程>java聊天室服务器端程序
学员需求

java聊天室服务器端程序

摘要:聊天室服务器端程序任务介绍:编写一个聊天室服务器端程序,该程序负责管理客户端连接并转发客户端聊天信息。。以下是我们为大家整理的,相信大家阅读完后肯定有了自己的选择吧。

2022-06-13 13:31网络推荐

发布时间:
2022-06-13 13:31
信息来源:
网络推荐
浏览次数:
1445
java聊天室服务器端程序

聊天室服务器端程序
任务介绍:编写一个聊天室服务器端程序,该程序负责管理客户端连接并转发客户端聊天信
息。
任务目标:掌握网络相关 API,掌握聊天室服务器端的实现思路。
实现思路:在服务器端通过 SocketServer 来监听指定端口,当有客户端连接请求到达时,在
服务器端启动一个新线程来处理与该客户端的信息交换,并将处理信息的 Socket 对象添加
到在线列表中,当客户端发送信息到服务器端是,根据信息类型,服务器负责向所有活动的

客户端或指定客户端转发信息。

from shengerguan

实现代码:

package aw;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;

public class ChatRoomServer {
	private ServerSocket serverSocket;
	private HashMap<String,Socket> userList;
	private Socket socket;

	public ChatRoomServer() {
		try {
			serverSocket = new ServerSocket(6666);
			userList = new HashMap(100);
			System.out.println("服务器已启动");
			while (true) {
				socket = serverSocket.accept();
				new Thread(new ServerResponse(socket)).start();
				System.out.println("有用户连接");
			}
		} catch (IOException e) {
// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	class ServerResponse implements Runnable {
		Socket Socket;
		BufferedInputStream bis;

		public ServerResponse(Socket s) {
// TODO Auto-generated constructor stub
			socket = s;
		}

		@Override
		public void run() {
// TODO Auto-generated method stub
			try {
				bis = new BufferedInputStream(socket.getInputStream());
				Scanner scanner = new Scanner(bis);
				while (true) {
					String rawString = scanner.nextLine();
					String[] str = rawString.split("@");
					switch (str[0]) {
					case "WELCOME":
						responseWelcome(str[1], socket);
						responseUserList(socket);
						break;
					case "COMMEN":
						responseCommen(str[1], str[2], socket);
						break;
					case "PRIVACY":
						responsePrivacy(str[1], str[2], str[3], socket);
						break;
					case "QUIT":
						break;
					}
				}
			} catch (IOException e) {
// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		private void responsePrivacy(String senderName, String ReciverName, String msg, Socket socket) {
// TODO Auto-generated method stub
			PrintWriter pw;
			Set users = userList.keySet();
			Socket so = userList.get(ReciverName);
			try {
				pw = new PrintWriter(new BufferedOutputStream(so.getOutputStream()));
				pw.println("PRIVACY@" + senderName + "@" + msg);
				pw.flush();
			} catch (IOException e) {
// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		private void responseCommen(String senderName, String msg, Socket socket) {
// TODO Auto-generated method stub
			PrintWriter pw;
			Set<String> users = userList.keySet();
			for (String user : users) {
				if (senderName.equals(user))
					continue;
				Socket so = userList.get(user);
				try {
					pw = new PrintWriter(new BufferedOutputStream(so.getOutputStream()));
					pw.println("COMMEN@" + msg);
					pw.flush();
				} catch (IOException e) {
// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

		private void responseUserList(java.net.Socket socket) {
// TODO Auto-generated method stub
			Set users = userList.keySet();
			Object[] names = users.toArray();
			StringBuilder sb = new StringBuilder();
			for (Object name : names)
				sb.append("@" + (String) name);
			try {
				PrintWriter pw = new PrintWriter(new BufferedOutputStream(socket.getOutputStream()));
				pw.println("LIST" + sb.toString());
				pw.flush();
			} catch (IOException e) {
// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public void responseWelcome(String userName, Socket s) {
		PrintWriter pw;
		userList.put(userName, s);
		Set<String>  users = userList.keySet();
		for (String user : users) {
			Socket so = userList.get(user);
			try {
				pw = new PrintWriter(new BufferedOutputStream(so.getOutputStream()));
				pw.println("WELCOME@" + userName);
				pw.flush();
			} catch (IOException e) {
// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] arg) {
		ChatRoomServer server = new ChatRoomServer();
	}
}

上一篇:
Java TCP 案例-文件上传
下一篇:
java网络聊天室客户端
标签:
网友评论
发布评论

访客的评论 2024/07/27 15:17

文中描述的是准确的吗,如何报名!

相关推荐
我也来发表评价关闭
我对该内容的评价:
0
评价500
验证码: 看不清 换一张
提交 (匿名发布,无须担心别人知道您的身份)
学校免费发布信息关闭
我们审核后会尽快展示,如有图片请发邮件到:edu63@foxmail.com

姓      名:

内      容:

手机号码:

验  证  码:  换一张

确认提交
填写需求信息关闭
我们会根据您的需求匹配并审核留言

姓      名:

意向城市:

留      言:

手机号码:

验  证  码:  换一张

确认提交
完善补充本文信息关闭
非常感谢您帮助完善补充本文信息


 换一张

确认提交