帮我写一个简单的聊天室啊 socket,多线程, 帮我写一个简单的聊天室啊 socket,多线程,刚发错地方了 昏死 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 此回复为自动发出,仅用于显示而已,并无任何其他特殊作用楼主【yaoqing123】截止到2008-07-20 01:05:00的历史汇总数据(不包括此帖):发帖的总数量:2 发帖的总分数:160 每贴平均分数:80 回帖的总数量:2 得分贴总数量:0 回帖的得分率:0% 结贴的总数量:1 结贴的总分数:100 无满意结贴数:0 无满意结贴分:0 未结的帖子数:1 未结的总分数:60 结贴的百分比:50.00 % 结分的百分比:62.50 % 无满意结贴率:0.00 % 无满意结分率:0.00 % 楼主加油 找了半天你看满意不?import java.io.*;import java.net.*;import java.util.*;public class ChatServer { public static void main(String args[]) { Hashtable<String,DataOutputStream> userList = new Hashtable<String,DataOutputStream>(); String name; DataInputStream dis; DataOutputStream dos; try{ ServerSocket ss = new ServerSocket(9999); while(true){ Socket s = ss.accept(); dis = new DataInputStream(s.getInputStream()); dos = new DataOutputStream(s.getOutputStream()); name = dis.readUTF(); userList.put(name,dos); new MyServerReader(name,dis,userList).start(); } }catch(Exception e){ e.printStackTrace(); } }}class MyServerReader extends Thread{ private String name; private DataInputStream dis; private Hashtable<String,DataOutputStream> userList; public MyServerReader(String name,DataInputStream dis,Hashtable<String,DataOutputStream> userList ){ this.name = name; this.dis = dis; this.userList = userList; } public void run(){ String info; try{ transmitMessage(name + " in!","--Server Info--"); while(true){ info = dis.readUTF(); if(info.equals("bye")){ DataOutputStream dos = (DataOutputStream)(userList.get(name)); Thread.sleep(1000); dos.close(); dis.close(); userList.remove(name); transmitMessage(name + " out!","--Server Info--"); break; }else if(info.length()>0){ transmitMessage(info,name); } } }catch (Exception e) { } } public void transmitMessage(String msg,String name){ Collection doses = userList.values(); DataOutputStream dos; for(Object o: doses){ dos = (DataOutputStream)o; try{ dos.writeUTF(name + ":" + msg); }catch(Exception e){ } } } } 求助~关于子集合的问题 JComboBox删除清空的问题(删除最后一项会抛异常) 我的一个疑问,为什么输出结果是这样的啊... luence中文搜索 100分只为异常,不知哪里出问题了!!!希望路过的兄弟进来帮帮忙!!小弟昨天已经弄了一晚上了! jxl无法访问这样的xls文件? 急啊,马上给分!在Struts+Spring+Hibernate下,怎么从本地读一个图片存在服务器的 BLOB字段里?(二进制?) 怎么用java代码表示从C++代码?关于字符的处理 c++与java 有什么区别? 请问如何编写运行第一个程序? java日志类多线程同步问题! 给一个多线程的列子
楼主【yaoqing123】截止到2008-07-20 01:05:00的历史汇总数据(不包括此帖):
发帖的总数量:2 发帖的总分数:160 每贴平均分数:80
回帖的总数量:2 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:1 结贴的总分数:100
无满意结贴数:0 无满意结贴分:0
未结的帖子数:1 未结的总分数:60
结贴的百分比:50.00 % 结分的百分比:62.50 %
无满意结贴率:0.00 % 无满意结分率:0.00 %
楼主加油
你看满意不?
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatServer {
public static void main(String args[]) {
Hashtable<String,DataOutputStream> userList = new Hashtable<String,DataOutputStream>();
String name;
DataInputStream dis;
DataOutputStream dos;
try{
ServerSocket ss = new ServerSocket(9999);
while(true){
Socket s = ss.accept();
dis = new DataInputStream(s.getInputStream());
dos = new DataOutputStream(s.getOutputStream());
name = dis.readUTF();
userList.put(name,dos);
new MyServerReader(name,dis,userList).start();
}
}catch(Exception e){
e.printStackTrace();
}
}
}class MyServerReader extends Thread{
private String name;
private DataInputStream dis;
private Hashtable<String,DataOutputStream> userList;
public MyServerReader(String name,DataInputStream dis,Hashtable<String,DataOutputStream> userList ){
this.name = name;
this.dis = dis;
this.userList = userList;
}
public void run(){
String info;
try{
transmitMessage(name + " in!","--Server Info--");
while(true){
info = dis.readUTF();
if(info.equals("bye")){
DataOutputStream dos = (DataOutputStream)(userList.get(name));
Thread.sleep(1000);
dos.close();
dis.close();
userList.remove(name);
transmitMessage(name + " out!","--Server Info--");
break;
}else if(info.length()>0){
transmitMessage(info,name);
}
}
}catch (Exception e) {
}
}
public void transmitMessage(String msg,String name){
Collection doses = userList.values();
DataOutputStream dos;
for(Object o: doses){
dos = (DataOutputStream)o;
try{
dos.writeUTF(name + ":" + msg);
}catch(Exception e){
}
}
}
}