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;
}
}