帮我写一个简单的聊天室啊 socket,多线程,
刚发错地方了 昏死
刚发错地方了 昏死
解决方案 »
- 组件的靠右侧对齐
- 请大家帮忙看看
- 大家拿socket和多线程在做什么?
- java如何将时间字符串“2006-7-16 23:59:58”转化成Date ?
- Swing中,如何设置JFrame的modal模式?
- 我想在java界面上,点击一个按钮, 就执行本地的一个exe文件, 请问这样的代码怎样写?? 谢谢
- 怎么用异常处理?
- 弱弱的求助--98下的JDK 1.4.1,怎样安装,设置路径,环境变量等..
- html存入数据库表中,其中的图片的src如何处理?是写绝对路径,还是有其他方法?请赐教。55分奉上。
- 怎样定义一个对象数组用于存储输入的学生数据
- 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){
}
}
}
}