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

📄 server.java

📁 服务器可以支持多客户端连接
💻 JAVA
字号:
/*
 * Created on 2005-11-3
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package xdevelop.nioserver.chat;

/**
 * @author chengang
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
import java.io.*;
import java.awt.*;
import java.net.*;
import java.awt.event.*;

public class Server {
	public static void main(String arg[]) {
		ServerService MyServer = new ServerService(8000, 10);

	}
}
//交互端的服务窗口    

class ServiceThread extends Frame implements ActionListener, Runnable {
	ServerService FatherListener;

	Socket ConnectedClient;

	Thread ConnectedThread;

	Panel ListenePanel;

	TextArea ServerMeg;

	TextArea ServerWrite;

	Label la;

	Button bt;

	BufferedReader in;

	PrintWriter out;

	public ServiceThread(ServerService sv, Socket s) {
		//容器与格子组建的结合

		FatherListener = sv;
		ConnectedClient = s;
		ConnectedThread = new Thread(this);
		//采用线程的目的是利用他的并发机制,实现多个任务

		//在当前的类中(this)通过Runnabel()接口实现Thread()的Run()方案

		setTitle("Answer Client");
		setLayout(new GridLayout(4, 1));
		//采用格子组建的形式完成组建的安排 

		ServerMeg = new TextArea(null, 5, 45, TextArea.SCROLLBARS_VERTICAL_ONLY);
		//添加各种组建到容器当中
		ListenePanel = new Panel();
		ListenePanel.add(ServerMeg);
		add(ListenePanel);
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				//((Frame)e.getWindow()).dispose();//保留的语句
				System.exit(0);
			}
		});
		//第二个Panel() 

		la = new Label("服务端消息输入框...............");
		add(la);
		ServerWrite = new TextArea(10, 50);
		add(ServerWrite);
		//add(p2);
		setSize(355, 360);

		Panel p3 = new Panel();

		bt = new Button("传送");
		bt.addActionListener(this);
		p3.add(bt);
		add(p3);

		setResizable(false);

		show();
		InetAddress ClientAddress = ConnectedClient.getInetAddress();
		ServerMeg.append("Client Conneted from \n "
				+ ClientAddress.getHostAddress() + "!");

	}

	//完成事件的部
	//面临的一个问题是空发消息

	public void actionPerformed(ActionEvent ex) {

		if (ex.getSource() == bt) {
			if ((int) ((ServerWrite.getText().toString()).length()) != 0)
				ServerMeg.append("服务端消息:" + ServerWrite.getText() + "\n");
			out.println("\n" + ServerWrite.getText());
			ServerWrite.setText("");
		} else {

			ServerMeg.append("系统提示: 不能空法消息!\n");

		}

	}

	//  覆盖线程的run()方法

	public void run() {

		try {
			in = new BufferedReader(new InputStreamReader(ConnectedClient
					.getInputStream()));
			out = new PrintWriter(ConnectedClient.getOutputStream(), true);

			out.println("Hello!    Wellocme  connect  our server !");

			out.flush();
			String s = in.readLine();
			if (s.equals("bye"))
				out.println("已经断开与服务器的连接.............. \n   欢 迎 下 次 观 顾!");
			while (!s.equals("bye")) {
				ServerMeg
						.append("\n#_________________________________________#\n"
								+ s);
				s = in.readLine();
			}

			ConnectedClient.close();

		} catch (Exception e) {
		}
		FatherListener.addMeg("Client" + "Cloesd." + "\n");

	}//run(),finished;

}

//服务窗口

class ServerService extends Frame {
	ServerSocket Listener;

	TextArea ListenerMeg;

	public ServerService(int port, int Count) {
		try {

			Listener = new ServerSocket(port, Count);//开启监听的端口

			setTitle("服务监听");
			this.addWindowListener(new WindowAdapter() {
				public void windowClosing(WindowEvent e) {
					((Frame) e.getWindow()).dispose();//释放组建与内存
					System.exit(0);

				}
			});
			setLayout(new BorderLayout());
			ListenerMeg = new TextArea("监听服务已经启动 \n", 10, 50);
			add("Center", ListenerMeg);
			setResizable(false);//设计固定的状态
			pack();//重新的打包

			show();
			while (true) {
				Socket connected = Listener.accept();//等待外部的连接,直到连接成功才返回一个套接字

				InetAddress ClientAddress = connected.getInetAddress();
				ListenerMeg.append("\n Client connected from :\n"
						+ ClientAddress.toString());
				ServiceThread MyST = new ServiceThread(this, connected);//初使化服务线程
				//this指向当前对象的指针

				MyST.ConnectedThread.start();//启动线程
			} //获取套接子,激活线程,采用循环的语句解决方式

		} catch (Exception ep) {
		}

	}

	public void addMeg(String s) {
		ListenerMeg.append(s);

	}
}

⌨️ 快捷键说明

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