⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 b06370ef9dd6001919bff8f785df8e18

📁 使用TCP和UDP协议
💻
字号:
/*
 * 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;
    JabberThread(ServerGUI serverGUI, TCPThread tcpThread ,int udpPort)
    {
        this.serverGUI = serverGUI;
        this.tcpThread = tcpThread;
        port = udpPort;
        
        try
        {
            serverAddress = InetAddress.getByName(null);
        } catch(UnknownHostException uhn)
        {
            
        }
        
        try
        {
            receiveSocket = new DatagramSocket(serverGUI.udpPort);
            //System.out.println(receiveSocket.getInetAddress().getCanonicalHostName());
        } catch(SocketException se)
        {
            serverGUI.appendDisplayArea("无法打开DatagramSocket,无法接收消息,请确定端口可用,然后重新启动\n");
            return ;
        }
        
       packetReceived = new DatagramPacket(byteReceived, 1024);
       if (packetReceived == null)
           serverGUI.appendDisplayArea("null\n");
    }
  
    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时出现异常\n");
            }
            //从map中删除
            tcpThread.sockets.remove(user_name);
        } else
        {
            serverGUI.appendDisplayArea("在删除用户时,出现用户名解析错误,找不到对应的键值");
        }
    }
    
    public void run()
    {
        while(true)
        {
	        try
	        {
	            receiveSocket.receive(packetReceived);
	            System.out.println(packetReceived.getLength());
	            serverGUI.appendDisplayArea("接到一个DatagramPacket\n");
	        } catch(IOException ioe)
	        {
	            serverGUI.appendDisplayArea("接收一个DatagramPacket时出现输入输出异常\n");
	        }
	        
//	      	判断如果消息是退出消息的话,就将对应的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 + -