黑马程序员----网络编程

                                      第一部分:基础知识的学习

概述:

网络模型:OS参考I模型 TCP/IP模型

        OSI 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层

       TCP/IP 应用层 传输层 网际层 主机至网络层

       在每一层往下数据封包 相同层之间可以看层透明传输

常用协议:

        传输层TCP UDP

        网际层 IP

        应用层 HTTP FTP

网络通信要素:

       IP 地址 端口号 通讯协议 

       端口号就是为了区分计算机里面的应用程序而为每一个应用程序的标识

       IP 网络设备的标识

TCP/UDP区别:

       UDP:面向无连接 不可靠协议

       将源地址与目的地址封装在包内

       数据大小在64k内 传输数度快

       TCP:面向有链接的传输

       通过3次握手链接,可靠协议

       传输数度稍低

       可进行大数据传输

Socket  编程:

       socket就是为网络服务提供一种机制

       通讯两端都有socket

       网络通信其实就算socket之间的通讯

       数据在两个socket之间通过io传输

重要知识点:

dataGramSocket:此类用来表示发送和接收数据报包套接字

dataGramPacket:用来实现无连接的数据包投递服务

 

                                    第二部分:代码实现

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

 

class send implements Runnable

{

    //创建套接字

    private DatagramSocketds;

    public send (DatagramSocket ds)

     {

        this.ds=ds;

     }

   //从写run方法

    publicvoid run()

     {

        try

          {

             //获取键盘录入数据

                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

                 String line = null;

            while((line=bufr.readLine())!=null)

               {

                 //如果对方发来再见 就break

                 if("886".equals(line))

                 break;

                 //数据给到buf

                byte[] buf =line.getBytes();

                //将数据封包,指定地址与端口

                     DatagramSocket dp = new DatagramSocket(buf,buf.length,InetAddress.getByName("192.168.23.255"),10002);

               //发送出去

               ds.send(dp);

                 }

          }

       catch(Exception e)

         {

            //如果出现异常则抛出异常

            thrownew RuntimeException("Failed to send");

          }

     }

}

 

class Rece implements Runnable

{

     //建立udp socket创建端点

     private DatagramSocketds;

     public Rece (DatagramSocket ds)

      {

          this.ds=ds;

      }

    //重写run方法

    publicvoid run()

     {

        try

          {

             while (true)

                {

                   //定义缓存区

                  byte []buf =newbyte[1024];

                  //定义数据包

                        DatagramPacket dp = new DatagramPacket(buf,buf.length);

                  //接收数据包

                  ds.receive(dp);

                 //获取地址

                       String ip =dp.getAddress().getHostAddress();

                //获取数据

                     String data = new String(dp.getData(),0,dp.getLength());

                     System.out.println(ip+":"+data);

               }

            }

         catch(Exception e)

           {

               thrownew RuntimeException("Failed to receve");

           }

   }

}

 

class SocketDemo

{

        publicstaticvoid main(String [] args)throws Exception

          {

             //多线程开启

                 DatagramSocket sendSocket = new DatagramSocket();

                 DatagramSocket receSocket = new DatagramSocket(1001);

             new Thread(new send(sendSocket)).start();

             new Thread(new send(receSocket)).start();

          }

}

 

                                         第三部分:总结

通过对网络部分的学习 初步掌握网络编程中的基础知识,包括通信模型,原理,以及实现过程,通过后面视频的小项目的练习,巩固加深了这一认识

你可能感兴趣的:(黑马程序员学习博客)