1 获取本机信息
(1) 本机信息类:InetAddreass net = InetAddress.getLocalHost();
(2) 本机计算机名:net.getHostName();
(3) 本机IP地址:net.getHostAddress();
2 UDP传输协议
注释:单向传输,不可靠
2.1 客户端
java
// 建服务器连接信息
byte[] addr = {-64, -88, 0, 109}; // 192.168.0.109 (127以上用值减256例:192-256=-64)
InetAddress serverNet = InetAddress.getByAddress(addr);
// 指定服务器端口号
int serverPort = 8081;
// 创建客户端通信类(端口随机):
DatagramSocket ds = new DatagramSocket();
// 等待控制台输入,传输数据
Scanner s = new Scanner(System.in);
String str = s.nextLine();
while(!"exit".equals(str)) {
byte[] datas = str.getBytes();
DatagramPacket sp = new DatagramPacket(
datas,
datas.length,
serverNet,
serverPort);
ds.send(sp); // 发送数据
str = s.nextLine();
}
ds.close();
2.2 服务器
java
// 创建服务器通信类
DatagramSocket ds = new DatagramSocket(8081);//服务器端口(随意指定,但客户端需指定)
byte[] datas = new byte[1024*64]; // 指定1次接收最大数据量
DatagramPacket sp = new DatagramPacket(datas, datas.length);
while(true) {
ds.receive(sp); // 等待接收数据,接收到再继续执行
sp.getPort(); // 获取到客户端端口号
String str = new String(datas, 0, sp.getLength()); // 接收到数据
}
3 TCP传输协议
3.1 客户端
java
// 创建通信类
Socket s = new Socket("192.168.0.109", 8081); // 指定服务器IP端口号
OutputStream os = s.getOutputStream();
// 控制台输入传输数据
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
while (!"exit".equals(str)) {
os.write(str.getBytes()); // 输出流将数据写到服务器
os.flush(); // 刷出缓存
str = sc.nextLine();
}
os.close();
s.close();
3.2 服务器
java
// 创建通信类
ServerSocket ss = new ServerSocket(8081); // 定义服务器端口号
// 等待客户端连接
Socket s = ss.accept();
// 读取客户端数据
while(true) {
InputStream is = s.getInputStream();
byte[] datas = new byte[1024*64];
int len;
String str = "";
while((len = is.read(datas))!=-1) { // 客户端close后输入流停止读取
str = new String(datas, 0, len);
}
is.close();
s.close();
s = ss.accept(); // 等待下一次客户端连接
}
4 多客户端连接
Socket获取输出流,可以给客户端发信息,实现聊天功能。群聊(服务器管理多个客户端Socket,获取对应的输出流发消息)
java
while(true) {
Socket s = ss.accept(); // 循环获取客户端连接
线程类(s); // 让线程类处理s通信
}
5 处理浏览器请求
(1) 浏览器:http:ip:端口 访问服务器ServerSocket
(2) 服务器响应:输出http格式字符串
java
PrintStream ps = new PrintStream(socket.getOutputStream());
ps.println("HTTP/1.1 200 OK");
ps.println("Content-Type:text/html;charset=UTF-8");
ps.println();
ps.print("<html>...</html>");
socket.close();