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

📄 client.java

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

package client;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;


public class Client  extends Thread {
    public  Login login;
    public String localname = null;
    private Socket socket;
    public  clientGUI clientgui;
    public String host="192.168.128.160";
    public  int port=8000;
    private DataInputStream datain = null;
    private DataOutputStream dataout = null;       
    private int localport = 0;
    public udptalks udptalk = null;
    public String[] mygroups;
    public Map<String,String> onlinefriends;
    public Map<String,Object> group1;
    public Vector onlinevector;
    public Vector downlinevector;
    
    public Client(){
        onlinefriends = new HashMap<String,String>(); 
        group1 = new HashMap<String,Object>();
        onlinevector = new Vector();
        downlinevector = new Vector();
        try {
            socket = new Socket(host,port);
        } catch (UnknownHostException e) {
            System.out.println("unkown the hostcomputer");
        } catch (IOException e) {
            e.printStackTrace();
        }              
        login = new Login(this);
        login.setVisible(true);
        InputStream input = null;
        OutputStream output = null;
        try {
            input = socket.getInputStream();
            output = socket.getOutputStream();
        } catch (IOException e) {                
            e.printStackTrace();
        }
        datain = new DataInputStream(input);
        dataout = new DataOutputStream(output);
    }
    public void sentmessage(String st){
        if(!st.equals("")){
            try {
                dataout.writeUTF(st);
            } catch (IOException e) {                    
                System.out.println("发送失败");
            }
        }	
    }
    public void run(){
        boolean stop = false;
        String st = null;
        while(!stop){
            try {
                st = datain.readUTF();
            } catch (IOException e) {
                e.printStackTrace();
            }
            if(st.startsWith("登陆:")){                       //判断收到的数据报是否是回复登陆的
                String sr = st.substring(st.indexOf(":")+1);
                if(!sr.equals("success")){
                    login.setError(sr);
                }else{
                    localname = login.textlogin.getText().trim();
                }
            }
            if(st.startsWith("在线好友:")){                    //判断受到的数据报是否是发送在线好友列表的
                System.out.println("收到好友列表"+st);
                String fr = st.substring(st.indexOf(":")+1);
                if(!fr.equals("")){
                    String []friend = fr.split(",");
                    for(int i = 0;i < friend.length; i++){
                        String []f = friend[i].split("/");
                        onlinefriends.put(f[0], f[1]+"/"+ f[2]);
                        onlinevector.add(f[0]);
                        System.out.println("好友名:"+f[0]+"网络地址:"+f[1]+"/"+f[2]);
                    }                          
                }else{
                }
            }
            if(st.startsWith("离线好友:")){                       //判断收到的数据报是否是发送给该用户离线好友的列表                     
                System.out.println("收到好友列表:::"+st);
                String fr = st.substring(st.indexOf(":")+1);
                if(!fr.equals("")){
                    String []friend = fr.split(",");
                    //  strings = new String[friend.length];
                    for(int i = 0;i < friend.length; i++){
                        //  System.out.println("好友名:"+friend[0]);
                        downlinevector.add(friend[i]);
                        System.out.println("离线好友名:"+friend[i]);
                    }                       
                }
            }
            if(st.startsWith("群组:")){
                System.out.println("收到群组:::"+st);
                String groups = st.substring(st.indexOf(":")+1);
                String[] group = groups.split("/");
                mygroups = new String[group.length];
                for(int i=0; i< group.length; i++){
                    Groupworks sock = null;
                    System.out.println("收到群组:"+group[i]);
                    mygroups[i] = group[i];                    
                    if(group[i].equals("1111")){                            
                        try {
                            sock = new Groupworks(InetAddress.getByName("239.255.8.0"),5858,localname);
                            new Thread(sock).start();
                            group1.put("1111",sock);
                        } catch (UnknownHostException ex) {
                            ex.printStackTrace();
                        }               
                    }
                    if(group[i].equals("2222")){
                        try {
                            sock = new Groupworks(InetAddress.getByName("239.255.9.0"),5868,localname);                        
                            new Thread(sock).start();                            
                            group1.put("2222",sock);
                        } catch (UnknownHostException ex) {
                            ex.printStackTrace();
                        } 
                    }
                }
            }
            if(st.startsWith("注册:")){                        //判断接收到的的数据报是否是 注册的成功信息
                if(st.substring(st.indexOf(":")+1).equals("success")){
                    login.setError("注册成功");
                    login.textPassword.setText("");
                }else{
                    login.setError("用户名已存在");
                }
            }
            if(st.equals("end")){                             //判断收到的数据报是否是服务器端的TCP数据报发送完成
                try {  System.out.println("关闭连接qqqaaaa");
                // tal.printtalk("本地端口:"+socket.getLocalPort());
                localport = socket.getLocalPort();
                System.out.println("本地端口是:"+localport);                                                              
                udptalk = new udptalks(localport,login.textlogin.getText().trim(),this);     //开启UDP通信      
                udptalk.start();           
                clientgui = new clientGUI(this,udptalk,login.textlogin.getText().trim());       //产生UDP 通信的图形界面
                login.setVisible(false);
                socket.close();                      
                } catch (IOException e) {
                    //e.printStackTrace();
                }                      
                stop = true;
            }
        }
        
    }
    public String[] getonline(){
        int onlinesize = 0;
        onlinesize = onlinevector.size();  
        String[] online = new String[onlinesize];
        for(int i=0; i<onlinesize; i++){
            System.out.println("在线用户aa:"+(String)onlinevector.get(i));
            online[i] =(String)onlinevector.get(i);
        }
        return online;
    }
    public String[] getdownline(){
        int downlinesize = 0;                              
        downlinesize = downlinevector.size();                    
        String[] downline = new String[downlinesize];        
        for(int i=0; i<downlinesize; i++){
            downline[i] =(String)downlinevector.get(i);            
            System.out.println("离线线用户bb:"+(String)downlinevector.get(i));
        }
        return downline;
    }
    
    public static void main(String []args){
        new Client().start();
    }
    public String gethost(){
        return host;
    }
    
    public Map<String,String> getfriends(){
        return onlinefriends;
    }
}

⌨️ 快捷键说明

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