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