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

📄 udptalks.java

📁 一个采用Java Socket编程实现的QQ软件
💻 JAVA
字号:


package client;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import javax.swing.JTree;


public class udptalks extends Thread{
    public  String localusername;         //记录当前用户的用户名
    private DatagramSocket GetquitSock;   //UDP通信的Socket
    private int localport;
    public Client client;
    private String getmessage;
    private DatagramPacket Getpacket;
    private String 对方 = null;
    private byte[] buff = new byte[1024];
    public udptalks(int localport,String localusername,Client client) {  //利用本地端口,自身用户名,主方法Client建立UDP通信        this.localusername = localusername;
        this.client = client;
        this.localport = localport;
        this.localusername = localusername;
        System.out.println("本地端口是:"+localport);
        Getpacket = new DatagramPacket(buff, buff.length);          //建立一个接收的UDP数据报的Packet 
        try {
            GetquitSock = new DatagramSocket(localport);            //建立一个接收UDP数据报的Socket
        } catch (SocketException ex) {
            //ex.printStackTrace();
            System.out.println("建立接受的DatagramSocket产生异常");
        }
        
    }
    public void run(){        
        boolean stop = false;
        while(!stop){
            if(GetquitSock == null)
                break;
            else{
                try {
                    GetquitSock.receive(Getpacket);
                    int length=Getpacket.getLength();
                    InetAddress adress=Getpacket.getAddress();
                    int port=Getpacket.getPort();
                    System.out.println("接收到服务的数据报");
                    getmessage=new String(Getpacket.getData(),0,length);                    
                    System.out.println("源ip地址:"+Getpacket.getAddress());
                    System.out.println("源ip地址:/"+client.gethost());                    
                    System.out.println("已进入");
                    dealwithserver(getmessage);              
                } catch (IOException ex) {
                    //  ex.printStackTrace();
                    System.out.println("接受数据报产生异常");
                }
            }
        }
        
    }
    public boolean sent_data(String Internet,int port,String message) {  //在客户端建立一个发送数据报的UDP套接字
        DatagramSocket mail_data = null;
        DatagramPacket data_pack = null;
        byte buffer[]=message.trim().getBytes();
        InetAddress address = null;
        try {
            address = InetAddress.getByName(Internet);
            data_pack = new DatagramPacket(buffer,buffer.length, address,port);
            try {
                mail_data=new DatagramSocket();
            } catch (SocketException ex) {
                // ex.printStackTrace();
                System.out.println("发送套接字建立失败");
            }
        } catch (UnknownHostException ex) {
            //ex.printStackTrace();
            System.out.println("目标地址找不到");
        }
        System.out.println("发送数据报到:"+ Internet);
        try {
            mail_data.send(data_pack);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return true;
    }
    public void sentfriendsdata(String username,String content){    //聊天室向朋友发送数据报的UDP套接字 
        DatagramSocket mail_data = null;
        DatagramPacket data_pack = null;
        String address = client.onlinefriends.get(username);
        if(!address.equals("")){
            String[] addre_port = address.split("/");
            String message = localusername + ":" + content;
            byte buffer[]=message.trim().getBytes();
            InetAddress addre = null;
            try {
                addre = InetAddress.getByName(addre_port[0]);
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }           
            int port = Integer.valueOf(addre_port[1]);
            data_pack = new DatagramPacket(buffer,buffer.length, addre,port);
            try {
                mail_data=new DatagramSocket();
            } catch (SocketException ex) {
                // ex.printStackTrace();
                System.out.println("发送套接字建立失败");
            }
            try {
                mail_data.send(data_pack);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
    
    public void dealwithserver(String st){         //处理接收的数据报
        if(st.startsWith("好友离线:")){
            String username = st.substring(st.indexOf(":")+1,st.length());
            System.out.println("离线好友: "+username);
            client.onlinevector.remove(username);
            client.downlinevector.add(username);
            client.onlinefriends.remove(username);       
            JTree tree = client.clientgui.mytree.checkJTree();
            client.clientgui.mytree.changeJTree(tree);      
            //更新界面
        }else if(st.startsWith("好友上线:")){
            String usermessage = st.substring(st.indexOf(":")+1,st.length());
            if(!usermessage.equals("")){
                System.out.println("好友上线的信息: "+usermessage);
                String[] user = usermessage.split(",");
                client.onlinefriends.put(user[0], user[1]);
                client.onlinevector.add(user[0]);
                client.downlinevector.remove(user[0]);
                JTree tree = client.clientgui.mytree.checkJTree();
                client.clientgui.mytree.changeJTree(tree);            
                //更新界面
            }            
        }else if(st.startsWith("加好友:")){
            String state = st.substring(st.indexOf(":")+1,st.length());
            if(state.equals("success")){
                // client.getchat().displaystate("添加成功");
                System.out.println("添加好友成功");
            }else{
                //client.getchat().displaystate("添加失败");
                System.out.println("添加好友失败");
            }
        }else if(st.startsWith("是否在线:")){
            sent_data(client.gethost(),5748,"在线:ok");
        }else if(st.startsWith("加入群组:")){
            String messages = st.substring(st.indexOf(":")+1,st.length());
            if(messages.equals("1111")){
                client.clientgui.getGroupmessage().label2.setText("添加成功");
                String[] groupa = new String[client.mygroups.length+1];
                for(int i = 0; i < client.mygroups.length; i++ ){
                    groupa[i] = client.mygroups[i];
                }
                groupa[client.mygroups.length] = "1111";
                client.mygroups = groupa;
                JTree tree = client.clientgui.mytree.checkJTree();
                client.clientgui.mytree.changeJTree(tree);
            }else if(messages.equals("2222")){
                client.clientgui.getGroupmessage().label2.setText("添加成功");
                String[] groupa = new String[client.mygroups.length+1];
                for(int i = 0; i < client.mygroups.length; i++ ){
                    groupa[i] = client.mygroups[i];
                }
                groupa[client.mygroups.length] = "2222";
                client.mygroups = groupa;
                JTree tree = client.clientgui.mytree.checkJTree();
                client.clientgui.mytree.changeJTree(tree);
            }else{
                client.clientgui.getGroupmessage().label2.setText(messages);
            }
        }else if(st.startsWith("1111:")||st.startsWith("2222:")){
            // String[] online = {"1111","22222"};
            // String[] downline = {"3333","3333"};
            String username = st.substring(st.indexOf(":"));
            String[] usernames = username.split(",");
            /*  if(!usernames[0].equals("null")){
             String[] online = usernames[0].split(",");
             }
             if(!usernames[1].equals("null")){
             String[] downline = usernames[1].split(",");
             }*/
            if(st.startsWith("1111:")){
                GrouptalkGUI grouptalkgui = new GrouptalkGUI(usernames,(Groupworks)client.group1.get("1111"),client.localname);
                ((Groupworks)client.group1.get("1111")).grouptalk = grouptalkgui;
            }
            if(st.startsWith("2222:")){
                GrouptalkGUI grouptalkgui = new GrouptalkGUI(usernames,(Groupworks)client.group1.get("2222"),client.localname);
                ((Groupworks)client.group1.get("2222")).grouptalk = grouptalkgui;
            }
          
        }else if(st.startsWith("通知:")){
            String messages = st.substring(st.indexOf(":")+1,st.length()); 
              talkGUI talk = new talkGUI("服务器",client.clientgui,this);
              talk.displaymessage("服务器",messages);
            System.out.println("服务器通知:" + messages);
        }else{
            if(!st.equals("")){
                  System.out.println("好友发的信息为:"+st);
                String username = st.substring(0,st.indexOf(":"));
                String messages = st.substring(st.indexOf(":")+1,st.length());
                talkGUI talking = client.clientgui.serch(username);
                if(talking != null){
                    talking.displaymessage(username, messages);         //将好友传来的数据发布到聊天框中
                }else{
                   talkGUI talk = new talkGUI(username,client.clientgui,this);
                   talk.displaymessage(username,messages);
                   client.clientgui.inserttalkfriends(username,talk);
                }
            }        
        }
    }
    public void dealwithclient(String st){
        对方 = st.substring(0,st.indexOf(":")-1);
    }
    
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -