java 简单聊天室程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简单聊天室程序
先运行Server,然后运行test。有简单的界面登录成功后实现群聊,-to name something 实现单独聊天
package chatroom;
import java.io.IOException;
import .DatagramPacket;
import .DatagramSocket;
import .InetAddress;
import .SocketAddress;
import .SocketException;
import .UnknownHostException;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Scanner;
public class Server implements Runnable{
private DatagramSocket server = null;
private DatagramPacket getDatas = null;
private InetAddress serverAddress = null;
private int port = 0;
//开始运行监听的变量
private boolean beStart = false;
//用来测试服务器的变量
private boolean test = true;
//信息存储器
private Hashtable
/**
* 测试服务器连接
* @param ip
* @param port
* @return
*/
public boolean testServer(String ip,int port) {
this.initServer(ip, port);
return test;
}
/**
* 服务器初始化
* @param ip
* @param port
*/
public void initServer(String ip,int port) {
//确定IP与port输入正确
this.fixServerLink(ip,port);
try {
server = new DatagramSocket(this.port,serverAddress);
System.out.println("!-The Server Initialization Success!");
//可以开始运行变量
beStart = true;
} catch (SocketException s) {
//如果出现异常,则服务器测试不通过
test = false;
errorTip("!-The Server Initialization Fail!");
}
}
/**
* 确定服务器IP和端口信息
* @param ip
* @param port
*/
private void fixServerLink(String ip,int port) {
//判断连接服务器的端口号
//如果输入命令为0,则为默认端口号9999
//否则端口号为新端口号
if(port == 0)
this.port = 9999;
else
this.port = port;
//判断连接服务器的IP地址
//如果输入命令为0,则为默认的本地IP地址
//否则为输入的IP地址
try {
if(ip.equalsIgnoreCase("0"))
this.serverAddress = InetAddress.getLocalHost();
else
this.serverAddress = InetAddress.getByName(ip);
} catch (UnknownHostException u) {
errorTip("!-Sorry, IP address you put is not currect!");
}
}
* 监听信息
*
*/
public void listenLink() {
byte[] buf = new byte[1024];
String mes = null;
try {
getDatas = new DatagramPacket(buf,buf.length);
System.out.println("!-The Server starts listenning to message.");
while(beStart) {
server.receive(getDatas);
mes = new String(buf,0,getDatas.getLength());
//将获取的数据传递至数据分析器
this.analyseMes(mes);
}
} catch (IOException e) {
errorTip("!-The Server Can not receive message");
}
}
/**
* 数据分析器,给予相应处理
* @param mes
*/
private void analyseMes(String mes) {
//获取当前客户端的地址:
SocketAddress adr = getDatas.getSocketAddress();
//-test:进行服务器与客户端的连接测试
//若成功,则将该客户端发送成功消息
if(mes.trim().equalsIgnoreCase("-test")) {
transforMesSingle(adr,"-test: !-From Server:Succeed in Testing.");
}
//-quit:接受客户端退出信息
//将该用户的退出信息转发至所有在线成员
else if(mes.trim().equalsIgnoreCase("-quit")) {
String name = this.getConsumerName(adr);
System.out.println(name+"//"+adr+" quit! ");
transforMes("* "+name+"退出聊天室");
infoMemory.remove(name);
}