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