教育路上

全国站>Java>Java基础>java在线聊天室服务端ServerSocket
学员需求

java在线聊天室服务端ServerSocket

摘要:java在线聊天室服务端ServerSocket。以下是我们为大家整理的,相信大家阅读完后肯定有了自己的选择吧。

2021-06-29 11:20网络推荐

发布时间:
2021-06-29 11:20
信息来源:
网络推荐
浏览次数:
1644
java在线聊天室服务端ServerSocket

package chartall;
import java.io.*;
import java.net.*;
import java.util.HashMap;
import java.util.Set;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class server extends JFrame { 
	private JButton serverstart;
	private JPanel up;
	private JPanel down;
	private JLabel serverstartlable;
	private JTextField port;
	private JButton serversubmit=new JButton("确定启动");
	private ServerSocket serversocket;
	private HashMap userlist=new HashMap();
	private Socket client;
	
	public server() {
		gui();//图形界面
		listion();//按钮监听
		waitsocket();//等待客户端连接
		flashchart();//刷新聊天内容
	}
	
	void gui(){
		//窗体
		JFrame f=new JFrame("服务端");
		f.setSize(400,200);
		f.setLocation(300,100);	
		up=new JPanel() ;
		down=new JPanel() ;
		serverstartlable=new JLabel("未启动服务器") ;
		up.add(serverstartlable);
		serverstart=new JButton("启动服务器") ;
		down.add(serverstart);
		f.setLayout(new BorderLayout());
		f.add(up,BorderLayout.NORTH);
		f.add(down,BorderLayout.SOUTH);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);				
		f.setVisible(true);
	}
	
	void listion() {
		//服务器端口
		serverstart.addActionListener(new ActionListener() { 
			public void actionPerformed(ActionEvent e) {
				JDialog dialog = new JDialog(server.this, true );
				dialog.setTitle("服务器连接端口");
				dialog.setSize(300, 200);
				dialog.setLocation(50, 50);
				dialog.setLayout(new FlowLayout());
				JLabel portlable=new JLabel("端口号");
				port=new JTextField(10);
				dialog.add(portlable);
				dialog.add(port);
				dialog.add(serversubmit);
				dialog.setVisible(true);
			}
		});
		
		//服务器端口确定
		serversubmit.addActionListener(new ActionListener() { 
			public void actionPerformed(ActionEvent e) {
				String a="服务器已启动,端口:"+port.getText();
				serverstartlable.setText(a);
				int ports=Integer.parseInt(port.getText());
				try {
					serversocket=new ServerSocket(ports);
				}catch(Exception e1) {
					return;
				}				
			}
		});
	}
	
	void flashchart(){		
		new Thread() {
			public void run() {
				while(true) {
					System.out.println(client);
					if(client!=null) {
						String str;
						try {
							BufferedReader reader = new BufferedReader(new InputStreamReader(client  
				                    .getInputStream()));  
							str=reader.readLine();
						}catch(Exception e1) {
							return;
						}
						
					String[] arr=str.split("@");
	                String usrename = arr[0];  
	                String message = arr[1]; 
	                String status = arr[2]; 
					//zhangshan@@reg
					//zhangshan@聊天内容@all
					//zhangshan@聊天@wang
	                if(status.equals("reg")) {
	                	Setkeyset=userlist.keySet();
						int a=0;
	                	for(String user:keyset) {	
							if(user.equals(usrename)) {
								a=1;
								break;
							}
						}
	                	if(a==0) {
	                		userlist.put(usrename, client);
	                	}
	                	String userflash=null;
	                	for(String user:keyset) {	
	                		userflash=userflash+"@"+user;
						}
	                	userflash=userflash+"@userlist";
	                	for(String user:keyset) {	
		                	try {	
		                	PrintWriter writer = new PrintWriter(userlist.get(user).getOutputStream()); 
		                	writer.println(userflash);  
		                	writer.flush(); 
		                	}catch(Exception e1) {
								return;
							}
	                	}
	                }else if(status.equals("所有人")) {
	                	Setkeyset=userlist.keySet();
	                	for(String user:keyset) {	
		                	try {	
		                	String allchart=usrename+"@对所有人说:"+message+"@群发聊天";
		                	PrintWriter writer = new PrintWriter(userlist.get(user).getOutputStream()); 
		                	writer.println(allchart);  
		                	writer.flush(); 
		                	}catch(Exception e1) {
								return;
							}
	                	}                	
	                }else{
	                	Setkeyset=userlist.keySet();
	                	for(String user:keyset) {	
		                	try {
		                	if(status.equals(user)) {
			                	String allchart=usrename+"@对"+status+"说:@"+message;
			                	PrintWriter writer = new PrintWriter(userlist.get(user).getOutputStream()); 
			                	writer.println(allchart);  
			                	writer.flush(); 
		                	}
		                	}catch(Exception e1) {
								return;
							}
	                	}    						
	                }					 
                }	
			   }
			}
		}.start();
	}
	
	void waitsocket(){		
		new Thread() {
			public void run() {
				while(true) {
					System.out.println(serversocket);
					if(serversocket!=null) {					
					try {
						client= serversocket.accept();
					}catch(Exception e1) {
						return;
					}
                    }	
			  }
		  }
	  }.start();			
	}
	
	public static void main(String[] args) {
		new server();

	}

}

上一篇:
java多线程循环等待服务器向客户端发送数据流网络编程
下一篇:
java通过StringTokenizer类来分割字符串
标签:
网友评论
发布评论

访客的评论 2024/04/24 10:18

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

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

姓      名:

内      容:

手机号码:

验  证  码:  换一张

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

姓      名:

意向城市:

留      言:

手机号码:

验  证  码:  换一张

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


 换一张

确认提交