java socket使用TCP协议实现的聊天室
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.Socket服务器端
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import .ServerSocket;
import .Socket;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Scanner;
public class Server implements Runnable {
private static ServerSocket server;
private static Socket socket=null;
// 信息存储器
private Hashtable
private DataInputStream dis;
private DataOutputStream dos;
public void run() {
// 监听信息的方法
listenLink();
}
// 监听信息
private void listenLink(){
try {
while(true){
dis = new DataInputStream(socket.getInputStream());
String str = dis.readUTF();
System.out.println(str);
this.analyseMes(str);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 数据分析器,给予相应处理
private void analyseMes(String mes) {
String[] n=mes.split(":");
String name1=null;
String message="";
if (n.length>1) {
for (int i = 0; i < n.length; i++) {
name1=n[0];
if (i!=0) {
message += n[i];
}
}
socket=infoMemory.get(name1);
}
System.out.println(message);
// -quit:接受客户端退出信息
// 将该用户的退出信息转发至所有在线成员
if (message.trim().equalsIgnoreCase("-quit")) {
System.out.println(name1 + "//" + socket + " quit! ");
transforMes("* " + name1 + "退出聊天室");
Socket sk=infoMemory.get(name1);
transforMesSingle(sk, name1+"-quit");
try {
sk.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
infoMemory.remove(name1);
if(infoMemory.size()>=1){
@SuppressWarnings("rawtypes")
Iterator iter = infoMemory.keySet().iterator();
String key = (String) iter.next();
socket = infoMemory.get(key);
}
}
// -getList:接受客户端获取列表的请求
// 将所有用户连接为字符串的形式,如:"-getList,用户1,用户2...用户n" else if (message.trim().equals("-getList")) {
StringBuffer list = new StringBuffer();
list.append("-getList,");
Enumeration
while (names.hasMoreElements()) {
list.append(names.nextElement() + ",");
}
transforMesSingle(socket, list.toString());
}
// -to:接受客户端请求,将信息转发给相应客户
// 如果目标客户不存在,则向请求客户发送相应消息
else if (message.indexOf("-to ") != -1 && message.startsWith("-to ")) {