- 使用JAVA编程实现多人聊天室(需要用到多线程),并要求服务器端至少包含如下功能:
(1) 若有新用户连接,则向已经连接到服务端的用户发送用户上线消息。
(2) 若有用户断开连接,则向在线用户发送用户下线消息。
(3) 若有用户发送消息,则向所有用户转发该消息。
(4) 当停止服务时,断开所有用户连接。
import java.io.*;
import java.io.BufferedReader;
import java.net.*;
import java.util.*;
public class Server implements Runnable{
static Socket socket=null;
static ServerSocket serversocket=null;
static Socket[] sockets=new Socket[20];
static int number=0;
public Server(){
try {
serversocket=new ServerSocket(5000);
}
catch (IOException e){
e.printStackTrace();
}
}
public static void main(String args[]){
Scanner input =new Scanner (System.in);
System.out.println("服务端开始工作");
Server t=new Server();
while(true){
try{
socket=serversocket.accept();
number++;
sockets[number]=socket;
System.out.println("第"+number+"个客户连接");
}
catch(IOException e){
e.printStackTrace();
}
Print p = new Print(socket);
Thread read = new Thread(t);
Thread print = new Thread(p);
read.start();
print.start();
}
}
public void run(){
try{
Thread.sleep(1000);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(true){
String xinxi=in.readLine();
System.out.println(xinxi);
PrintWriter out = new PrintWriter(socket.getOutputStream());
for (int i = 0; i < 20; i++) {
Socket socket=sockets[i];
if (socket!=this.socket) {
out.println(xinxi);
}
out.flush();
}
}
}
catch (IOException e) {
System.out.println("客户离开");
return;
}
catch(Exception e){
e.printStackTrace();
}
}
}
import java.io.*;
import java.net.*;
import java.util.*;
public class Print implements Runnable{
Socket[] sockets=new Socket[20];
static int number=0;
Scanner in =new Scanner (System.in);
public Print (Socket s){
while(number<=19){
sockets[number]=s;
number++;
}
}
public void run(){
try{
Thread.sleep(1000);
while(true){
String msg=in.next();
for(int i=0;i<number-1;i++){
PrintWriter out = new PrintWriter(sockets[i].getOutputStream());
out.println("服务端说:"+msg);
}
}
}
catch(Exception e){
e.printStackTrace();
}
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class client implements Runnable{
static Socket socket=null;
Scanner input = new Scanner (System.in);
static String name=null;
public static void main(String args[]){
int x=(int)(Math.random()*100);
client.name="clent"+x;
System.out.println("欢迎进入");
try{
socket=new Socket("127.0.0.1",5000);
System.out.println("已经连上服务器");
}
catch(Exception e){
e.printStackTrace();
}
client t=new client();
Read read =new Read (socket);
Thread print=new Thread(t);
Thread reading =new Thread(read);
print.start( );
reading.start( );
}
public void run() {
try {
Thread.sleep(1000);
PrintWriter out = new PrintWriter(socket.getOutputStream());
while (true) {
String msg = input.next();
out.println(name+"说:"+msg);
out.flush();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class Read implements Runnable{
static Socket socket = null;
public Read(Socket socket){
this.socket=socket;
}
public void run(){
try{
Thread.sleep(1000);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(true){
System.out.println(in.readLine());
}
}
catch(Exception e){
e.printStackTrace();
}
}
}