Java聊天室小程序-服务器代码实现方面
时间:2011-06-19 51cto博客 sundunjam
服务器的实现效果:
1.输入-help得到所有有关服务器操作的命令
2.输入-run进入服务器各项内容初始化
3.输入-stop断开服务器
4.输入-quit断开服务器,并退出操作
5.服务器创建成功后,会通过单独的线程运行监听客户端信息(listenLink)
6.服务器接收到数据后,会将数据移交至数据分析器(analyseMes)处理
7.当用户确定连接并确定昵称后,服务器将该用户的地址及姓名存储在 infoMemory中。
服务器的类与方法:
1.测试服务器创建:testServer(String ip,int port)
2.初始化服务器 :initServer(String ip,int port)
3.确定IP与Port :fixServerLink(String ip,int port)
4.信息监听器 :listenLink()
5.数据分析器 :analyseMes(String mes)
6.获取地址用户名:getConsumerName(SocketAddress sa)
7.数据转发器 :transforMes(String mes)
8.数据单项转发器:transforMesSingle(SocketAddress adr,String mes)
9.停止服务器 :cutServer()
10.获得帮助列表 :helpList()
11.错误提示方法 :errorTip(String str)
12.在主函数中进行相应操作
Java聊天室小程序-服务器代码实现方面(2)
时间:2011-06-19 51cto博客 sundunjam
重点注意的地方:
与客户端相仿,为了顺利监听信息,需要另一个线程运行信息监听器
package com.sunspot.udp.chat;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketAddress;
import java.net.SocketException;
import java.net.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<String,SocketAddress> infoMemory = new Hashtable<String,SocketAddress>();
/**
* 测试服务器连接
* @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!");
} finally {
}
}
/**
* 确定服务器IP和端口信息
* @param ip
* @param port
*/
private void fixServerLink(String ip,int port) {
//判断连接服务器的端口号
//如果输入命令为0,则为默认端口号9999
//否则端口号为新端口号
if(port == 0)
this.port = 9999;
else
this.port = port;
//判断连
|