📄 qqclient.java
字号:
package NewQQ;import java.awt.*;import java.awt.event.*;import java.io.*;import java.net.*;import javax.swing.*;import java.util.*;public class QQClient { static String name; static String ipaddress; static HashMap friends = new HashMap(); static String filetransport = ""; static String savefile; public static void main(String[] args) throws Exception{ //1.获取用户名和服务器地址 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("请输入姓名:"); name = br.readLine(); System.out.println("请输入服务器地址:"); ipaddress = br.readLine(); //2.判断用户名是否合法 if(name.equals("所有人")){ System.out.println("系统保留字不可使用,请重新登录服务器!"); return; } Socket clientsocket = new Socket(ipaddress,14789); ObjectOutputStream sendmsg = new ObjectOutputStream(clientsocket.getOutputStream()); ObjectInputStream recvmsg = new ObjectInputStream(clientsocket.getInputStream()); QQMessage sendmessage = new QQMessage(); //3.判断用户名是否已经被占用 sendmessage.setSender(name); sendmsg.writeObject(sendmessage); sendmsg.flush(); QQMessage recvmessage = (QQMessage) recvmsg.readObject(); //3.1被占用 if(recvmessage.getMessage().equals("false")){ System.out.println("用户名已存在,请更换后重新登录"); return; } //3.2可以使用 else{ //3.2.1创建聊天主窗口 QQChatFrame frame = new QQChatFrame(name, sendmsg,friends,clientsocket); frame.creat(); //3.21.循环读取信息 while(true){ QQMessage nmsg = (QQMessage)recvmsg.readObject(); int type = nmsg.getType(); if(type == 1){ frame.jcb.addItem(nmsg.getSender()); frame.jta.append(nmsg.getSender()+" 上线了!\n"); } else if(type == 2){ frame.jcb.addItem(nmsg.getSender()); } else if(type == 3){ frame.jta.append(nmsg.getSender()+" 对大家说:"+nmsg.getMessage()+"\n"); } else if(type ==7){ try { frame.jta.append(nmsg.getSender()+" 下线了!\n"); frame.jcb.removeItem(nmsg.getSender()); SingleFrame sf; sf = (SingleFrame)friends.get(nmsg.getSender()); if(sf !=null){ sf.jframe.dispose(); friends.remove(nmsg.getSender()); } } catch (RuntimeException e) {} } else if(type==12){ filetransport = nmsg.getFilename(); } else if(type==13){ savefile = nmsg.getFilename(); } else if(type==11){ if(filetransport!=null){ SingleFrame sf = (SingleFrame)friends.get(nmsg.getSender()); if(sf == null){ sf = new SingleFrame(nmsg.getSender(),sendmsg,friends,name); sf.init(); friends.put(nmsg.getSender(),sf); } sf.jtextarea.append("对方不同意接收文件\n"); filetransport = null; } } else{ SingleFrame sf = (SingleFrame)friends.get(nmsg.getSender()); if(sf == null){ sf = new SingleFrame(nmsg.getSender(),sendmsg,friends,name); sf.init(); friends.put(nmsg.getSender(),sf); } if(type == 4){ sf.jtextarea.append(nmsg.getSender()+" 对我说:\n"); sf.jtextarea.append(nmsg.getMessage()+"\n\n"); } else if(type ==5){ sf.jtextarea.append(nmsg.getSender()+" 发送文件: "+nmsg.getFilename()+"\n"); sf.jtextarea.append("接受或者取消"+"\n"); sf.jbuttonrecv.setEnabled(true); sf.jbuttonrefuse.setEnabled(true); } else if(type==8){ FileOutputStream fos = new FileOutputStream(savefile,true); fos.write(nmsg.getData(),0,nmsg.getLen()); fos.close(); } else if(type==9){ sf.jtextarea.append("接受文件完毕,保存为"+savefile+"\n\n"); savefile = ""; } else if(type==10){ sf.jtextarea.append("对方同意接收文件\n文件发送中......\n"); FileTransportThread ftt = new FileTransportThread(filetransport,sf,sendmsg); ftt.start(); } } } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -