📄 jqserver.java
字号:
package jq;
import java.net.*;
import java.io.*;
import java.util.*;
//类JQServer这是服务器类
public class JQServer {
// 定义一个服务器套接字对象
private ServerSocket server1;
//bman是一个Vector数据结构的类,它是用来存储聊天记录的
private bmanager bman=new bmanager();
private JQServer(){}
//负责接收和发送消息
void startserver()
{
try{
server1= new ServerSocket(6000);
System.out.println("服务器套接字创建完毕");
while(true)
{
Socket socket1=server1.accept();
new chat_thread(socket1).start();
bman.add(socket1);
bman.sendclientinfo();
}
}
catch(Exception e)
{
System.out.println(e);
}
}
public static void main(String[] args) {
JQServer server = new JQServer();
server.startserver();
}
class chat_thread extends Thread
{
Socket socket1;
private BufferedReader reader;
private PrintWriter writer;
chat_thread(Socket socket1)
{
this.socket1=socket1;
}
public void run()
{
try{
reader = new BufferedReader(new InputStreamReader(socket1.
getInputStream()));
writer = new PrintWriter(socket1.getOutputStream(), true);
String info;
while ((info = reader.readLine()) != null) {
System.out.println(info);
bman.sendtoall(info);
}
}
catch(Exception e){}
finally
{
try{
bman.remove(socket1);
if(reader!=null)
{
reader.close();
}
if(writer!=null)writer.close();
if(socket1!=null)socket1.close();
System.out.println("客户机离开了");
bman.sendclientinfo();
}
catch(Exception e){}
}
}
}
class bmanager extends Vector
{
void add(Socket socket1) {
super.add(socket1);
}
void remove(Socket socket1) {
super.remove(socket1);
}
synchronized void sendtoall(String info) {
PrintWriter writer = null;
Socket socket1;
for (int i = 0; i < size(); i++) {
socket1 = (Socket) elementAt(i);
try {
writer = new PrintWriter(socket1.getOutputStream(), true);
} catch (Exception e) {
if (writer != null)
writer.println(info);
}
}
}
synchronized void sendclientinfo() {
String info = "当前在线的人数:" + size();
System.out.println(info);
sendtoall(info);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -