黑马程序员——网络编程(一)

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

       网络编程就是: IO+网络

所有的通过介质的形势,能够互相通讯,网络就行程了。

如果是同一个模型,就可以连接上。网络七层(OSI参考模型):物理(介质,光纤),数据链路(网卡mac地址),网络 (路由器,模块指的是数据传输的路径),传输(TCP UDP端口号),会话(发起接受请求),表示(解释,加密等转化成课识别的东西),应用(终端应用,FTP,QQ,WEB)

 

TCP/IP参考模型:主机至网络层,网际层,传输层,应用层

实际开发在应用层和传输层使用

应用层到数据链路层,不断包装信息,在物理层为二进制,进入对方应用层不断拆包

互联网主机名定义,例如;mythinkqqq.edu.      商业组织com   中国cn  主机名是网址,

IP与主机名对应,以IP区分主机名  在c:\system32\drivers \etc\

款低啊提供声提供了域名解析,称为DNS域名解析服务器,是通过协议属性中配置,如果没有配置,先走dns ,联通的宽带可以陪电信的DNS

在任何一台计算机中安装DNS服务器软件,把列表配到里面,其他配置此DNS,这台电脑就可以完成解析。

127.0.01是本机地址,封广告   127.0.01  www.game.com.cn    屏蔽序列号的校验,通过360的地址列表

主机之间的通讯完成后,每台主机有很多不同的影城程序,如何实现应用程序的通讯?

通过端口号来识别不同的一个用程序  端口1000一下用不上是系统使用        网卡是物理端口,软件应用程序的数字标识是逻辑端口

具体在360网络连接查看   1024-65535可用    

传输协议

发送后,以什么方式通讯?

网络层中以什么传输?TCP传输控制协议,UDP数据报文包协议

UDP:面向无连接,发快递,兵你不知道地址存在与否,不关心对方是否在,速度较快。类似飞秋等及时聊天通讯

TCP:先保证对方存在,连接畅通。通过三次握手,更可靠。类似打电话

05完

socket

socket可以理解为插座,港口。编写网络程序,先有插座。分别专门对TCP和UDP。网络编程也称为soket编程

在不同的语言中体现的对象不一样。基于网络的IO流。

1 首先简历UDP的socket.它具备发送或者接收功能

2 将数据封装到数据包中,数据包对象是DatagramPacket

3 使用socket对象的send方法将数据包发送出去

4 关闭资源

DatagramSocket ds = new DatagramSocket();
        
        String text="hello udp";
        byte[] buf=text.getBytes();
//        将字节封装到数据包中
        DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.223"), 8080);
        ds.send(dp);
        ds.close();

定义接收端:

1 插座服务,接收端定义端口,不然接收不到数据

2 接收数据,存储到数据包中。

3 定义数据包

4 获取内容:发送端的ip,端口号,数据

5 关闭资源

DatagramSocket ds = new DatagramSocket(8080);
        
        byte[] buf=new byte[4096];
        DatagramPacket dp = new DatagramPacket(buf, buf.length);
        ds.receive(dp);
//        接收数据
        String ip =dp.getAddress().getHostAddress();
        int port=dp.getPort();

IP分为网络位和主机位

192.168.1.3  网络位    主机位    

子网掩码:255.255.255.0  被1掩盖的都是网络位,可以有200多主机

255是广播,没有这台主机,会发送给网段中所有的主机



TCP

socket  和serverSocket   流不需要创建,网络连接通自动会有,直接获取

1 建立TCP的客户端scoket,明确服务端的地址和端口

2 如果通道建立成功就会出席那socket IO 流

    获取socket输出流,把数据发送到服务端

3 通过socket将数据发送

4 关闭流资源

如果没有连接,什么都不会做。

服务端:

/*
         * 需求:获取客户端的数据并显示在屏幕上。 思路: 1,创建服务端的socket。明确端口,监听一个端口。
         * 2,服务端只要获取到连接过来的客户端就可以和指定的客户端通信了。 3,通过获取客户端的读取流对象读取客户端发来的数据。 4,并显示屏幕上。
         */
        // 1,创建服务端的socket。明确端口,监听一个端口。
        ServerSocket ss = new ServerSocket(10003);
        while (true) {
            // 2,服务端只要获取到连接过来的客户端就可以和指定的客户端通信了。
            Socket s = ss.accept();
            String ip = s.getInetAddress().getHostAddress();
            System.out.println(ip + ".....connected");
            // 3,通过获取客户端的读取流对象读取客户端发来的数据。
            InputStream in = s.getInputStream();
            // 4,并显示屏幕上。
            byte[] buf = new byte[1024];
            int len = in.read(buf);
            String text = new String(buf, 0, len);
            System.out.println(text);
            // 5,关闭资源。
            s.close();
        } 
客户端:
/*
         * 需求:通过tcp传输将数据发送给服务器。
         * 思路:
         * 1,建立tcp的客户端socket。明确服务端的地址和端口。
         * 2,如果通道建立成功就会出现socket io流。
         *         客户端需要做的就获取socket流的中输出流将数据发送目的地服务端。
         * 3,通过socket输出流将数据发送。
         * 4,关闭资源。
         */
        
//        1,建立tcp的客户端socket。明确服务端的地址和端口。
        Socket s = new Socket("192.168.1.223",10003);
        
//        2,如果通道建立成功就会出现socket io流。
//            客户端需要做的就获取socket流的中输出流将数据发送目的地服务端。
        OutputStream out = s.getOutputStream();
        
//        3,通过socket输出流将数据发送。
        out.write("hello tcp 来了!".getBytes());
        
//        4,关闭资源。
        s.close();

 

你可能感兴趣的:(黑马程序员——网络编程(一))