⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qqclient.java

📁 实现多人聊天以及私聊和传文件功能 类似于
💻 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 + -