⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serversocketone.java

📁 小型的群聊系统 系统只是做了一个小型的群聊系统
💻 JAVA
字号:
package net.server;

import java.awt.TextField;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import net.client.Client;

public class ServerSocketOne {

	ServerSocket socket;

	Socket so;

	boolean being;

	boolean be;

	Client c;

	int ii = 0;

	BufferedReader br;

	FileReader file;

	/**
	 * 要开启的服务器端口号
	 */
	int port;


	// 保存客户端
	List<Client> client = new ArrayList<Client>();

	// DataInputStream dis;
	String test;

	Server server;
	public ServerSocketOne(Server server) {
		this.server = server;
		readPort();
		server();
	}

	/* 读入端口号 */
	private void readPort() {
		try {
			file = new FileReader("port.txt");
			br = new BufferedReader(file);
		} catch (FileNotFoundException e1) {
			JOptionPane.showMessageDialog(null,"系统找不到port.txt文件!","加载错误",JOptionPane.ERROR_MESSAGE);
			System.exit(0);
			e1.printStackTrace();
		}

		try {
			port = Integer.parseInt(br.readLine());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/* 测试网络 */
	public String Test() {
		if (client.size() > 0) {
			test = "测试成功!";
		} else {
			test = "测试失败!!";

		}
		return test;
	}


	public void server() {
		try {
			socket = new ServerSocket(port);
			server.textArea.append("开启服务器"+"\n");
			being = true;
		} catch (IOException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		while (being) {
			try {
				so = socket.accept();
				c = new Client(so);
				client.add(c);
				new Thread(c).start();
				/* System.out.println("一客户连上123"); */
				server.textArea.append("以客户端连上"+"\n");
			} catch (SocketException e) {
				/* System.out.println("Socket is closed"); */
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

	/* 关闭server */
	public void close() {
		for (int i = 0; i < client.size(); i++) {
			Client c = client.get(i);
			c.closes();
			System.out.println("nihao");
		}
		
		try {
			if (so != null)
				so.close();
			if (socket != null) {
				socket.close();
			}
		} catch (IOException e) {
			//e.printStackTrace();
		}
	}

	private class Client implements Runnable {
		Socket so = null;

		String ss;

		DataInputStream dis = null;

		DataOutputStream dos = null;

		public Client(Socket so) {
			this.so = so;
			try {
				dis = new DataInputStream(so.getInputStream());
				dos = new DataOutputStream(so.getOutputStream());
				System.out.println("一客户连上.1");
			} catch (IOException e) {
				// TODO 自动生成 catch 块
				e.printStackTrace();
			}
		}

		// 关闭server
		public void closes() {
			try {
				// t.stop();
				if (so != null)
					so.close();
				if (dis != null)
					dis.close();
				if (dos != null)
					dos.close();
			} catch (IOException e) {
				// TODO 自动生成 catch 块
				//e.printStackTrace();
			}
		}

		/*
		 * 群发信息 public void rends(String st){
		 * System.out.println("有几个用户."+client.size()); for(int i=0;i<client.size();i++){
		 * Client c =client.get(i); c.rend(ss); } }
		 */
		public void rends(String st) {
			/* System.out.println("有几个用户."+client.size()); */
			for (int i = 0; i < client.size(); i++) {
				ii = i;
				Client c = client.get(i);
				if(this == c){
					
				}else{
					c.rend(st);
				}
				
			}
		}

		/* 单发信息 */
		public void rend(String st) {
			try {
				dos.writeUTF(st);
			} catch (SocketException e) {
				client.remove(ii);
				//System.out.println("对不起,Socket closed");
				server.textArea.append("一客户退出!"+"\n");
			} catch (IOException e) {

				client.remove(ii);
				
				System.out.println("这个数十" + ii);
				e.printStackTrace();
			}
		}

		public void run() {
			while (true) {
				try {
					ss = dis.readUTF();
					server.textArea.append(ss+"\n");
					 rends(ss);
				} catch (IOException e) {
					// TODO 自动生成 catch 块
					try {
						if (dis != null)
							dis.close();
						if (so != null)
							so.close();

					} catch (IOException e1) {
						// TODO 自动生成 catch 块
						e1.printStackTrace();
					}
				}/*
					 * finally{
					 * 
					 * try { if(dis != null) dis.close(); if(so != null)
					 * so.close(); } catch (IOException e1) { // TODO 自动生成 catch
					 * 块 e1.printStackTrace(); } }
					 */

			}

		}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -