📄 f0eaf66114d700191f48b4d0fe87e2ab
字号:
/*
* Created on 2005-5-31
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package server;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
import java.net.*;
import java.io.*;
import java.util.*;
class JabberThread extends Thread{
private int port = 1235;
ServerGUI serverGUI = null;
TCPThread tcpThread = null;
DatagramSocket receiveSocket = null;
DatagramPacket packetReceived = null;
byte[] byteReceived = new byte[1024];
// int receivedSize;
InetAddress serverAddress;
//判断是否构造成功:
boolean udpSuccess = true;
JabberThread(ServerGUI serverGUI, TCPThread tcpThread ,int udpPort)
{
this.serverGUI = serverGUI;
this.tcpThread = tcpThread;
port = udpPort;
serverGUI.appendDisplayArea("正在建立UDP Socket...");
try
{
serverAddress = InetAddress.getByName(null);
} catch(UnknownHostException uhn)
{
serverGUI.appendDisplayArea("未知主机");
udpSuccess = false;
}
try
{
receiveSocket = new DatagramSocket(serverGUI.udpPort);
//System.out.println(receiveSocket.getInetAddress().getCanonicalHostName());
} catch(SocketException se)
{
serverGUI.appendDisplayArea("无法打开DatagramSocket,无法接收消息,请确定端口可用,然后重新启动");
udpSuccess = false;
return ;
}
serverGUI.appendDisplayArea("UDPSocket已建立");
packetReceived = new DatagramPacket(byteReceived, 1024);
}
public void kickUser(String user_name)
{
Object value = tcpThread.sockets.get(user_name);
if (value != null)
{
//debug:
System.out.println("tcpThread.sockets.containsKey" + user_name);
try
{
((Socket)value).close();
} catch(IOException ioe)
{
serverGUI.appendDisplayArea("用户退出后关闭对应socket时出现异常");
}
//从map中删除
tcpThread.sockets.remove(user_name);
} else
{
serverGUI.appendDisplayArea("在删除用户时,出现用户名解析错误,找不到对应的键值");
}
}
//关闭以释放端口:
public void closeUdpSocket()
{
if (receiveSocket != null)
receiveSocket.close();
}
public void run()
{
while(true)
{
try
{
receiveSocket.receive(packetReceived);
System.out.println(packetReceived.getLength());
serverGUI.appendDisplayArea("从 " + packetReceived.getSocketAddress() + " 接到一个DatagramPacket");
} catch(IOException ioe)
{
serverGUI.appendDisplayArea("接收一个DatagramPacket时出现输入输出异常");
}
// 判断如果消息是退出消息的话,就将对应的Socket关闭,并从HashMap中删除
String messageStr = new String(byteReceived, 0, packetReceived.getLength());
if (messageStr.indexOf("QUIT: ") != -1)
{
String user = messageStr.substring(messageStr.indexOf("QUIT: ") + 6);
//debug:
System.out.println("kick " + user);
kickUser(user);
serverGUI.tcpThread.messageToAll("DEL " + user);
}
serverGUI.tcpThread.messageToAll(messageStr);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -