java socket使用TCP协议实现的聊天室

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 infoMemory = new 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 names = infoMemory.keys();

while (names.hasMoreElements()) {

list.append(names.nextElement() + ",");

}

transforMesSingle(socket, list.toString());

}

// -to:接受客户端请求,将信息转发给相应客户

// 如果目标客户不存在,则向请求客户发送相应消息

else if (message.indexOf("-to ") != -1 && message.startsWith("-to ")) {

相关文档
最新文档