Java聊天室小程序-客户端代码实现方面
时间:2011-06-19 51cto博客 sundunjam
客户端的实现效果
1.登录服务器,如果服务器端口号和IP号输入的字符都是"0"则,客户端连接 到默认的服务器
2.输入聊天昵称
3.输入"-quit"会自动退出聊天
4.输入"-getList"会得到在线用户的名称
5.输入"-to <用户名称> <聊天信息>"会把信息发送到指定的用 户处,他人看不到
6.输入"-help"会得到客户端相应操作帮助
6.直接输入内容则会将内容发送到所有在线的用户处
客户端的类与方法
1.建立连接方法:connectServer(String ip,int port)
2.断开连接方法:disconnectServer()
2.发送消息方法:sendMes(String mes)
3.接受消息方法:getMes()
4.接受一次消息:getMesOnce()
5.获得用户列表:getList(String mes)
6.测试连接方法:testConnect(String ip,int port)
7.检查用户名 :checkNickName(String nickName)
8.获得帮助列表:helpList();
9.各项内容的输入在main方法中进行
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.SocketException;
import java.net.UnknownHostException;
import java.util.InputMismatchException;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class Consumer implements Runnable{
//发送数据的服务器Net地址,在fixServerLink
//和sendMes方法中会用到
private InetAddress sendAddress = null;
private int port = 0;
//客户端
private DatagramSocket client = null;
//发送的数据报
private DatagramPacket sendDatas = null;
//用来测试是否能够连接成功或者用户名是否正确
//在testConnect和checkNickName中会用到.
//并穿插在sendMes方法中
private boolean test = true;
/**
* 建立连接
* @param ip 服务器IP号
* @param port 服务器Port
*/
public void connectServer(String ip,int port) {
//先确定输入的IP与端口号是否符合规则
this.fixServerLink(ip,port);
try {
client = new DatagramSocket();
} catch(SocketException s) {
System.out.println("The Connection of server is error.");
}
}
/**
* 确定IP与Port输入是否正确
* @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.sendAddress = InetAddress.getLocalHost();
else
this.sendAddress = InetAddress.getByName(ip);
} catch (UnknownHostException u) {
System.out.println("
|