C/S Client/Server 是指客户端和服务器结构 创建程序 QQ 迅雷等软件
B/S Brower/Server 浏览器程序连接数据库服务器
网络通信协议:TCP/IP 因特网互联协议
CMD:ipconfig 查询本机IP
端口号 不可重复 逻辑端口 可以使用软件查询端口号
1 系统自动分配 2 主动请求
范围0-65535 1024之间为系统端口 不可用
mysql:3306
Oracle:1521
Tomcat:8080
服务器:没有流 应该获取客户端的实例 利用客户端的IO流 和客户端进行交互
套接字:包含IP地址和端口号的网络单位
客户端和服务端交互 使用Socket中提供的网络流 不能自己创建
服务器端必须明确:多个客户端和服务端交互 (使用多线程技术)
html服务器:
/**
* @ClssName HtmlServer
* @Autor Yu
* @Description TODO
* @Date 2019/3/15 16:35
* Version 1.0
* 172.20.35.60
*/
public class HtmlServer {
public static void main(String[] args) throws IOException {
// 创建服务器实例
ServerSocket serverSocket = new ServerSocket(10003);
// 浏览器解析服务器回写的html页面 如果有图片我们需要多创建一个线程传送图片
// 我们让服务器一直处于监听状态 客户端请求一次 服务器回写一次
while (true) {
// 接收访问客户端
Socket socket = serverSocket.accept();
new Thread(()-> {
try {
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// 获取反馈的第一行信息 GET /net/index.html HTTP/1.1
String line = br.readLine();
// 对信息进行切割
String[] s = line.split(" ");
// 把路径前面的/去掉
String htmlPath = s[1].substring(1);
// 创建本地输入流构造方法绑定读取的html路径
FileInputStream fis = new FileInputStream(htmlPath);
// 获取网络字节输出流
OutputStream os = socket.getOutputStream();
// 填写协议
os.write("HTTP/1.1 200 OK".getBytes());
os.write("Content-Type:text/html\r\n".getBytes());
os.write("\r\n".getBytes());//没有空格不解析
// 读取本地网页 输出到浏览器客户端
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fis.read(bytes)) != -1) {
os.write(bytes, 0, len);
}
// 关闭本地输出流
fis.close();
// 关闭该连接的输出流
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
}
}
网友评论