📄 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 + -