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

📄 server.java

📁 用JAVA写的qq,为qq的跨平台使用提供了可能,一直都很讨厌tencent不为linux提供方便,自己写了一个qq,希望有人继续完善,我现在没空做了
💻 JAVA
字号:
//server.java
/**
@author Joedan
*/
import java.net.*;
import java.util.*;

class Server
{
//public:
	Server(int 服务器端口)
	{
//		根据“服务器端口”创建s
		try
		{
			s = new DatagramSocket(服务器端口);
			提示("服务器启动\n端口:" + 服务器端口);
		}
		catch(Exception e)
		{
			提示("服务器初始化失败,可能已有其它服务器在运行");
			提示("以下是系统提示:");
			e.printStackTrace();
			System.exit(0);
		}
	}
	void start()//启动服务
	{}
	void end()//结束服务
	{}
	DatagramPacket 读取数据包()//读取数据包
	{
//		s.receive(pr);
//		return pr;
		pr.setData(new byte[MyConstants.MAXSIZE]);//开辟新的缓冲区
		try
		{
			s.receive(pr);
		}
		catch(Exception e)
		{	
			return null;
		}
		return pr;
	}
	void 发送系统信息数据包(SocketAddress add, String msg)//传入预发送消息
	{
		DatagramPacket _ps = new DatagramPacket(new byte[MyConstants.MAXSIZE], MyConstants.MAXSIZE);
		_ps.setSocketAddress(add);
		tmp = MyConstants.系统信息 + msg;
		_ps.setData(tmp.getBytes());
		发送数据包(_ps);
	}
	void 发送注册结果数据包(SocketAddress add, String xx)// 用户SocketAddress,用户名,密码
	{
		DatagramPacket _ps = new DatagramPacket(new byte[MyConstants.MAXSIZE], MyConstants.MAXSIZE);
		_ps.setSocketAddress(add);
//		tmp = 取“发送注册结果数据包”的报头规则 + xx;
		tmp = MyConstants.注册结果 + xx;
		_ps.setData(tmp.getBytes());
		发送数据包(_ps);
	}
	void 发送登录结果数据包(SocketAddress add, String xx)// 用户SocketAddress,用户名,密码
	{
		DatagramPacket _ps = new DatagramPacket(new byte[MyConstants.MAXSIZE], MyConstants.MAXSIZE);
		_ps.setSocketAddress(add);
//		tmp = 取“发送登录结果数据包”的报头规则 + xx;
		tmp = MyConstants.登录结果 + xx;
		_ps.setData(tmp.getBytes());
		发送数据包(_ps);
	}
	void 发送好友上线数据包(SocketAddress add, String id, String ip, String port)//传入用户SocketAddress, 好友id, 好友ip, 好友port
	{
		DatagramPacket _ps = new DatagramPacket(new byte[MyConstants.MAXSIZE], MyConstants.MAXSIZE);
		_ps.setSocketAddress(add);
//		tmp = 取“发送好友上线数据包”的报头规则 + id + “,” + ip + “,” + port;
		tmp = MyConstants.好友上线 + id + "," + ip + "," + port;
		_ps.setData(tmp.getBytes());
		发送数据包(_ps);
	}
	void 发送好友下线数据包(SocketAddress add, String id)// 传入用户SocketAddress, 好友id
	{
		DatagramPacket _ps = new DatagramPacket(new byte[MyConstants.MAXSIZE], MyConstants.MAXSIZE);
		_ps.setSocketAddress(add);
//		tmp = 取“发送好友上线数据包”的报头规则 + id;
		tmp = MyConstants.好友下线 + id;
		_ps.setData(tmp.getBytes());
		发送数据包(_ps);
	}
	void 发送在线好友列表数据包(SocketAddress add,ArrayList id, ArrayList ip, ArrayList port)//传入用户SocketAddress, 好友id列表, 好友ip列表, 好友port列表
	{
//		tmp = 按列表格式组合id, ip, port
		int i = 0, j = id.size() - 1;
		tmp = "";
		for (; i < j; i++)
			tmp += id.get(i) + "," + ip.get(i) + "," + port.get(i) + ",";
		tmp += id.get(i) + "," + ip.get(i) + "," + port.get(i);
		发送在线好友列表数据包(add, j + 1, tmp);
	}
	void 发送在线好友列表数据包(SocketAddress add, int num, String s)//传入用户SocketAddress, 人数,列表;列表格式:“好友1id,好友1ip,好友1port好友2id,好友2ip,好友2port…”
	{
		DatagramPacket _ps = new DatagramPacket(new byte[MyConstants.MAXSIZE], MyConstants.MAXSIZE);
		_ps.setSocketAddress(add);
//		tmp = 取“发送在线好友列表数据包”的报头规则 + num + “,” + s;
		tmp = MyConstants.在线好友列表 + num + "," + s;
		_ps.setData(tmp.getBytes());
		发送数据包(_ps);
	}
	void 发送在线好友列表数据包(SocketAddress add, String s)//传入用户SocketAddress, 列表;列表格式:“人数,好友1id,好友1ip,好友1port好友2id,好友2ip,好友2port…”
	{
		DatagramPacket _ps = new DatagramPacket(new byte[MyConstants.MAXSIZE], MyConstants.MAXSIZE);
		_ps.setSocketAddress(add);
		s = MyConstants.在线好友列表 + s;//加入报头规则
		_ps.setData(s.getBytes());
		发送数据包(_ps);
	}
	void 发送好友列表数据包(SocketAddress add,ArrayList id, ArrayList name)// 传入用户SocketAddress, 好友id列表, 好友name列表
	{
//		tmp = 按列表格式组合id, name
		int i = 0, j = id.size() - 1;
		tmp = "";
		for (; i < j; i++)
			tmp += id.get(i) + "," + name.get(i) + ",";
//提示("j = " + j + " id.size = " + id.size() + " name.size = " + name.size() + " i = " + i);
		tmp += id.get(i) + "," + name.get(i);
		发送好友列表数据包(add, j + 1, tmp);
	}
	void 发送好友列表数据包(SocketAddress add, int num, String s)// 传入用户SocketAddress, 人数,列表;列表格式:“好友1id,好友1name,好友2id,好友2name…”
	{
		DatagramPacket _ps = new DatagramPacket(new byte[MyConstants.MAXSIZE], MyConstants.MAXSIZE);
		_ps.setSocketAddress(add);
//		tmp = 取“发送好友列表数据包”的报头规则 + num + “,” + s;
		tmp = MyConstants.好友列表 + num + "," + s;
		_ps.setData(tmp.getBytes());
		发送数据包(_ps);
	}
	void 发送好友列表数据包(SocketAddress add, String s)// 传入用户SocketAddress, 列表;列表格式:“人数,好友1id,好友1name,好友2id,好友2name…”
	{
		DatagramPacket _ps = new DatagramPacket(new byte[MyConstants.MAXSIZE], MyConstants.MAXSIZE);
		_ps.setSocketAddress(add);
		s = MyConstants.好友列表 + s;//加入报头规则
		_ps.setData(s.getBytes());
		发送数据包(_ps);
	}
	void 发送修改密码结果数据包(SocketAddress add, String xx)// 传入修改密码结果
	{
		DatagramPacket _ps = new DatagramPacket(new byte[MyConstants.MAXSIZE], MyConstants.MAXSIZE);
		_ps.setSocketAddress(add);
//		tmp = 取“发送修改密码结果数据包”的报头规则 + xx;
		tmp = MyConstants.修改密码结果 + xx;
		_ps.setData(tmp.getBytes());
		发送数据包(_ps);
	}
	void 发送在线用户列表数据包(SocketAddress add, ArrayList id, ArrayList name)//传入目标地址,用户id列表,用户name列表
	{
		DatagramPacket _ps = new DatagramPacket(new byte[MyConstants.MAXSIZE], MyConstants.MAXSIZE);
		_ps.setSocketAddress(add);
//		tmp =取“发送好友列表数据包”的报头规则 + 按列表格式组合id, name
		int i = 0, j = id.size();
		tmp = MyConstants.在线用户列表 + j;
		for (; i < j; i++)
			tmp += "," + id.get(i) + "," + name.get(i);
		_ps.setData(tmp.getBytes());
		发送数据包(_ps);
	}
	void 发送在线用户列表数据包(SocketAddress add, String s)//传入目标地址,列表;列表格式:数量,用户id列表,用户name列表...
	{
		DatagramPacket _ps = new DatagramPacket(new byte[MyConstants.MAXSIZE], MyConstants.MAXSIZE);
		_ps.setSocketAddress(add);
//		tmp =取“发送好友列表数据包”的报头规则 + 按列表格式组合id, name
		s = MyConstants.在线用户列表 + s;//加入报头规则
		_ps.setData(s.getBytes());
		发送数据包(_ps);
	}
//private:
	int 发送数据包(DatagramPacket p)//发送数据包,成功返回0
	{
		try
		{
			s.send(p);
		}
		catch(Exception e)
		{
			return -1;
		}
		return 0;
	}

	DatagramSocket s;
	DatagramPacket pr = new DatagramPacket(new byte[MyConstants.MAXSIZE], MyConstants.MAXSIZE);
	String tmp;

	public static void main(String args[])
	{
		Server s = new Server(5959);
		DatagramPacket p;
		ArrayList id = new ArrayList(),
		          ip = new ArrayList(),
		          port = new ArrayList(),
		          name = new ArrayList();
		id.add("10000");
		id.add("100001");
		id.add("201889");
		ip.add("192.168.99.18");
		ip.add("192.168.99.19");
		ip.add("192.168.99.20");
		port.add("5050");
		port.add("5151");
		port.add("525223");
		name.add("hong");
		name.add("guang");
		name.add("ming");

		p = s.读取数据包();
		System.out.println(new String(p.getData()).trim());//将数据包打印出来
//发送所有可能的数据包
s.发送系统信息数据包(p.getSocketAddress(), "hello world!");
s.发送注册结果数据包(p.getSocketAddress(),  "55");
s.发送系统信息数据包(p.getSocketAddress(), "快餐88!");
s.发送登录结果数据包(p.getSocketAddress(), "66");
s.发送好友上线数据包(p.getSocketAddress(), "10000", "192.168.19,99", "8888");
s.发送系统信息数据包(p.getSocketAddress(), "快餐88!");
s.发送好友下线数据包(p.getSocketAddress(), "10000");
s.发送好友列表数据包(p.getSocketAddress(), id, name);
s.发送在线好友列表数据包(p.getSocketAddress(), id, ip, port);
s.发送修改密码结果数据包(p.getSocketAddress(), "50");
s.发送在线用户列表数据包(p.getSocketAddress(), id, name);
	}
	static void 提示(String s)
	{
		System.out.println(s);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -