java编程实现多人聊天室功能

网友投稿 276 2023-01-24


java编程实现多人聊天室功能

本文实例为大家分享了java实现多人聊天室的具体代码,供大家参考,具体内容如下

程序源代码及运行截图:

server.java

//server.java

package Socket;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

public class server implements Runnable {// 服务端

static List socketList=new ArrayList();

// 读取 In

static Socket socket = null;

static ServerSocket serverSocket = null;

public server() {// 构造方法

try {

serverSocket = new ServerSocket(9999);

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

System.out.println("************服务端*************");

server t = new server();

int count = 0;

while (true) {

try {

// System.out.println("端口9999等待被连接......");

socket = serverSocket.accept();

count++;

System.out.println("第" + count + "个客户已连接");

socketList.add(socket);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

Print p = new Print(socket);

Thread read = new Thread(t);

Thread print = new Thread(p);

read.start();

print.start();

}

}

@Override

public void run() {

// 重写run方法

try {

Thread.sleep(1000);

BufferedReader in = new BufferedReader(new InputStreamReader(socket

.getInputStream()));

while (true) {

String jieshou = in.readLine();

System.out.println( jieshou);

for (int i = 0; i < socketList.size(); i++) {

Socket socket=socketList.get(i);

PrintWriter out = new PrintWriter(socket.getOutputStream());

if (socket!=this.socket) {

out.println(jieshou);

}else{

out.println("(你)"+jieshou);

}

out.flush();

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

class Print implements Runnable {

static List socketList=new ArrayList();

Scanner input = new Scanner(System.in);

public Print(Socket s) {// 构造方法

try {

socketList.add(s);

} catch (Exception e) {

e.printStackTrace();

}

}

@Override

public void run() {

try {

Thread.sleep(1000);

while (true) {

String msg = input.next();

for (int i = 0; i < socketList.size(); i++) {

Socket socket=socketList.get(i);

PrintWriter out = new PrintWriter(socket.getOutputStream());

// System.out.println("对客户端说:");

out.println("服务端说:"+msg);

out.flush();

}

}

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

}

client.java

//client.java

package Socket;

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="client"+x;

System.out.println("************客户端"+x+"*************");

try {

socket = newnqCMiSK Socket("127.0.0.1", 9999);

System.out.println("已经连上服务器了");

} catch (Exception e) {

e.printStackTrace();

}

client t = new client();

Read r = new Read(socket);

Thread print = new Thread(t);

Thread read = new Thread(r);

print.start();

read.start();

}

@Override

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();

}

}

}

class Read implements Runnable {

static Socket socket = null;

public Read(Socket socket) {

this.socket = socket;

}

@Override

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();

}

}

}

测试数据一:

服务端程序运行截图:

客户端1程序运行截图:

客户端2程序运行截图:

由测试数据一可以看出:程序可以实现多人聊天,并且效果和性能还算可以。而且每个客户端连接进服务器时,都会随机产生一个随机数作为自身的标志,避免通话过程中,分辨不清彼此,而导致交流效果不好。

测试数据二:

服务端运行截图:

客户端1程序运行截图:

客户端2程序运行截图:

客户端3程序运行截图:

客户端4程序运行截图:

客户端5程序运行截图:

客户端6程序运行截图:

客户端7程序运行截图:

客户端8程序运行截图:

客户端9程序运行截图:

客户端10程序运行截图:

测试二一共连入了10个客户端进行程序稳定性的测试,程序运行结果稳定,符合实验预期结果,充分说明了程序的鲁棒性较强。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java计算两个日期时间之间的天数最简方法
下一篇:手机接口自动化测试(软件测试接口自动化)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~