2021/8/19

8:30-9:00 学习打卡
9:30-12:00 写qq项目
15:00-17:00 写qq项目

1.添加了服务器传输好友群聊图片

登录成功,服务器将图片打包到消息包再传给客服端。

package qqserver.mode;
//qq服务器内部
import qqc.massage.Massage;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class qqserverm {
    String[] f1=null;
    public qqserverm(){
            try {
                ServerSocket ss = new ServerSocket(8888);
                while (true) {

                    Socket s = ss.accept();
                    ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
                    ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
                    Massage u1 = (Massage) ois.readObject();
                    if(u1.getS().equals("1")) {//上线和在线通知
                        Massage m = new Massage();
                        System.out.println("账号为: " + u1.getMyid());
                        Mysql my = new Mysql();
                        String pass = my.inlt("1", u1.getMyid());

                        if (pass.equals(u1.getUserpassward())) {
                            m.setS("1");
                            m.setMyname(my.inlt("5",u1.getMyid()));
                            m.setXiaoxi(my.inlt("2", u1.getMyid()));
                            m.setQun(my.inlt("3", u1.getMyid()));
                            m.setHei(my.inlt("4", u1.getMyid()));
                            ArrayList<String> zaix = new ArrayList<String>();
                            Massage ms = new Massage();
                            ms.setMyid(u1.getMyid());
                            ms.setS("11");
                            m.ss=new ArrayList<String>();
                            m.ss1=new ArrayList<Integer>();
                            m.ss2=new ArrayList<byte[]>();
                            m.qunname=new ArrayList<String>();
                            m.friendname=new ArrayList<String>();
                            f1 = m.getXiaoxi().split("\\|");
                            for (int i = 0; i < f1.length; i++) {
                                if (Mythreads.hm.containsKey(f1[i])) {
                                    zaix.add(f1[i]);
                                    ObjectOutputStream oos2 = new ObjectOutputStream(Mythreads.getthread(f1[i]).s.getOutputStream());
                                    ms.setOid(f1[i]);
                                    oos2.writeObject(ms);
                                }
                                m.friendname.add(my.inlt("5",f1[i]));//查找好友昵称
                                File fl=new File("src\\qqserver\\view\\"+f1[i]+".jpg");//获取图片文件路径
                                FileInputStream fis=new FileInputStream(fl.getCanonicalPath());
                                byte[] buf=new byte[1024];
                                int len;
                                while((len=fis.read(buf))!=-1){打包成二进制代码
                                    m.ss.add(f1[i]);
                                    m.ss1.add(len);
                                    m.ss2.add(buf);
                                    buf=new byte[1024];
                                }
                        }
                            f1 = m.getQun().split("\\|");//这是群聊的图片传输
                            for (int i = 0; i < f1.length; i++) {
                                m.qunname.add(my.qun("2",f1[i]));
                                File fl=new File("src\\qqserver\\view\\"+f1[i]+".jpg");
                                FileInputStream fis=new FileInputStream(fl.getCanonicalPath());
                                byte[] buf=new byte[1024];
                                int len;
                                while((len=fis.read(buf))!=-1){
                                    m.ss.add(f1[i]);
                                    m.ss1.add(len);
                                    m.ss2.add(buf);
                                    buf=new byte[1024];
                                }
                            }

                            m.setZaix(zaix);
                            oos.writeObject(m);
                            System.out.println("密码正确");
                            Mythread m1 = new Mythread(s);
                            Mythreads.add(u1.getMyid(), m1);
                            m1.start();
                            System.out.println(u1.getMyid() + " " + m1 + ":加入线程");
                        } else {
                            m.setS("2");
                            oos.writeObject(m);
                            System.out.println("密码错误");
                            s.close();
                        }
                    }

                }

            } catch(IOException | ClassNotFoundException e){
                    e.printStackTrace();
            }
    }
    public void inlt(){

    }
    public static void main(String argv[]){
        new qqserverm();
    }

}

2.添加图片接收

收到登录消息将信息取出图片以给出的名称传到文件夹。

package qqc.mode;

import qqc.massage.Massage;

import java.io.*;
import java.net.Socket;
import java.util.ArrayList;

public class qqlogin {
    boolean flag=false;
    public static Socket s;
    public String friend;
    public String qun;
    public String hei;
    public String myname;
    public ArrayList<String> zaix;
    public ArrayList<String> friendname;
    public ArrayList<String> qunname;
    public qqlogin(){
    }
    public void inlt(Object u){
        try {
            s=new Socket("127.0.0.1",8888);
            ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream());
            ObjectInputStream ois=new ObjectInputStream(s.getInputStream());
            oos.writeObject(u);
            Massage m=(Massage) ois.readObject();
            if(m.getS().equals("1")){
                flag=true;
                friend=m.getXiaoxi();
                qun=m.getQun();
                hei=m.getHei();
                myname=m.getMyname();
                zaix=m.getZaix();
                friendname=m.getFriendname();
                qunname=m.getQunname();
                Mthread m1=new Mthread(s);
                Mthreads.addThread(((Massage) u).getMyid(),m1);
                m1.start();
                String s3=null;
                FileOutputStream fos=null;
                for(int i=0;i<m.ss.size();i++)
                {
                    if(s3!=m.ss.get(i)){
                        s3=m.ss.get(i);
                        File fl=new File("src\\qqc\\view\\"+s3+".jpg");
                        fos=new FileOutputStream(fl.getCanonicalPath());
                    }
                    fos.write(m.ss2.get(i),0,m.ss1.get(i));
                }
            }
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    public boolean ok(){
        return flag;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值