Java

复习 13.网络编程

2019-03-16  本文已影响0人  第二套广播体操

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();

        }
    }
}

上一篇下一篇

猜你喜欢

热点阅读