public void run(){
try {
while(true){
Socket socket = null;
socket = serverSocket.accept();
if(userhashtable.get(username)){ //如果线程已开启,即将新的SOCKET覆盖旧的SOCKET
userThread.setSocket(socket);
}else{
UserThread userThread = new UserThread(socket);
userThread.start();
userhashtable.put(username,userThread);//将成功登陆的用户保存在列表上
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
第一次登陆成功后,数据是可以正常输入输出通讯,但现在问题是,如果USER重新登陆后,盖旧的SOCKET后,数据就无法在服务器端发送到
客户端.
应该如何做呢,KILL了原来的线程,关闭原来的SOCKET,再开线程,,,都试过了,都不行!请路过的大侠帮忙看看! 是不是原来的SOCKET没有处理好呢?应该如何去做????? 谢谢!
try {
while(true){
Socket socket = null;
socket = serverSocket.accept();
if(userhashtable.get(username)){ //如果线程已开启,即将新的SOCKET覆盖旧的SOCKET
userThread.setSocket(socket);
}else{
UserThread userThread = new UserThread(socket);
userThread.start();
userhashtable.put(username,userThread);//将成功登陆的用户保存在列表上
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
第一次登陆成功后,数据是可以正常输入输出通讯,但现在问题是,如果USER重新登陆后,盖旧的SOCKET后,数据就无法在服务器端发送到
客户端.
应该如何做呢,KILL了原来的线程,关闭原来的SOCKET,再开线程,,,都试过了,都不行!请路过的大侠帮忙看看! 是不是原来的SOCKET没有处理好呢?应该如何去做????? 谢谢!
你确定更新成功了吗?
猜想可能是SOCKET里的TIMEOUT,一直在没异常,所以...不知道为何不可以确确地关闭SOCKET和线程, 再重新开启
TCP连接客户端退出后,相应的线程要退出
user再次登录时应该起新的线程
Dates atime = new Dates();
GkbClientServiceThread gkbcs = (GkbClientServiceThread)GkbMobileServer.cleintSocketTable.get(machineName);
gkbcs.offSocket();
gkbcs.setDoneFlag(true);
GkbClientServiceThread cst = new GkbClientServiceThread( machineName ,clientSocket,printer );
pool.execute(cst);
if( printer )
System.out.println( machineName + " --> a-conn to Server.");
GkbMobileServer.cleintSocketTable.put( machineName , cst );
}else{
GkbClientServiceThread cst = new GkbClientServiceThread( machineName ,clientSocket,printer );
pool.execute(cst);
if( printer )
System.out.println( machineName + " -->conn to Server.");
GkbMobileServer.cleintSocketTable.put( machineName , cst );
//cst.start();
}以上是完全的登陆和再次登陆的代码!
做过的朋友,说说能带多少客户端.
我现在的问题也是重新开线程的做的,不知道现在的做法是否适合.