java 聊天服务器_简单的Java聊天服务器

我正在从我发现的一个简单的教程中创建一个TCP聊天服务器,我对

java很新.我最终将建立一个客户端类,但到目前为止我一直在通过telnet进行测试.我有几个问题.我已设置服务器从客户端获取命令.例如,“EXIT”关闭客户端连接,“Username”打印“OK”.如下所示:

用户1:TIM

Welcome to Bob's Chat Server!

Please Enter a User Name:

Tim

Welcome Tim we hope you enjoy your chat today

Bob:Hello

Hi Bob

Tim

OK

EXIT

Closing Connection . . . Goodbye

用户2:BOB

Welcome to Bob's Chat Server!

Please Enter a User Name:

Bob

Welcome Bob we hope you enjoy your chat today

Hello

Tim:Hi Bob

Tim:Tim

我有三个问题需要解决:

>你会注意到,当用户1键入“Tim”(他的用户名)时,它表示“OK”,就像我想要的那样,但它也将“Tim”打印到USER 2.有没有办法让它不发送我输入的命令?因此,当我键入“Tim”时,它不会向USER 2打印“Tim”吗?

>当消息发送给其他用户时,它会显示谁说出来.有没有办法在两个连接上打印名称?例如,当USER 2说“Hello”时,它看起来更像是两个连接上的“Bob:Hello”?

>有没有办法跟踪整个聊天会话中说的所有内容,并将聊天的全部内容打印到任何用户请求的内容?

这是我的服务器代码:

// Chat Server runs at port no. 9020

import java.io.*;

import java.util.*;

import java.net.*;

import static java.lang.System.out;

public class TCPServer

{

Vector users = new Vector();

Vector clients = new Vector();

int PORT = 9020;

int NumClients = 10;

public void process() throws Exception

{

ServerSocket server = new ServerSocket(PORT,NumClients);

out.println("Server Connected...");

while( true)

{

Socket client = server.accept();

HandleClient c = new HandleClient(client);

clients.add(c);

} // end of while

}

public static void main(String ... args) throws Exception

{

new TCPServer().process();

} // end of main

public void boradcast(String user, String message)

{

// send message to all connected users

for (HandleClient c : clients)

if (!c.getUserName().equals(user))

{

c.sendMessage(user,message);

}

}

class HandleClient extends Thread

{

String name = "";

BufferedReader input;

PrintWriter output;

public HandleClient(Socket client) throws Exception

{

// get input and output streams

input = new BufferedReader(new InputStreamReader(client.getInputStream())) ;

output = new PrintWriter (client.getOutputStream(),true);

output.println("Welcome to Bob's Chat Server!\n");

// read name

output.println("Please Enter a User Name: ");

name = input.readLine();

users.add(name); // add to vector

output.println("Welcome "+name+" we hope you enjoy your chat today");

start();

}

public void sendMessage(String uname,String msg)

{

output.println( uname + ":" + msg);

}

public String getUserName()

{

return name;

}

public void run()

{

String line;

try

{

while(true)

{

line = input.readLine();

if("EXIT".equals(line))

{

output.println("Closing Connection . . . Goodbye");

clients.remove(this);

users.remove(name);

break;

}

else if(name.equals(line))

{

output.println("OK");

}

boradcast(name,line); // method of outer class - send messages to all

}// end of while

} // try

catch(Exception e)

{

System.out.println(e.getMessage());

}

} // end of run()

} // end of inner class

} // end of Server

任何帮助表示赞赏.谢谢.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值