黑马程序员_网络编程

一、网络编程

        概念:不同地理位置的计算机进行通信。

       三要素:Ip地址,端口号,协议

       IP地址

                 网络中每一台计算机的标识。

      Ip地址分为5类。

        A类      1.0.0.0 到126.0.0.0
                    0.0.0.0 和127.0.0.0保留
        B类      128.1.0.0到191.254.0.0
                    128.0.0.0和191.255.0.0保留
       C 类     192.0.1.0 到223.255.254.0
                    192.0.0.0和223.255.255.0保留
        D 类     224.0.0.0到239.255.255.255用于多点广播

        E 类    240.0.0.0到255.255.255.254保留
                   255.255.255.255用于广播

      

     端口:用于标识进程的逻辑地址

      协议:制定的规则。包括Tcp 和UDP

           UDP: 1.数据源和目的源封装成数据包

                         2.不需要建立连接

                        3 . 每个数据包的大小限制走64k

                        4.是不可靠的协议

                        5.不需要建立连接,速度快

         TCP:   1.建立连接,形成数据传输通道。

                     2.数据大小无限制

                    3,通过3次握手建立连接

                     4,可靠的协议

                     5. 必须建立连接,速度慢

二、Socket机制

      它为网络编程提供一种机制,包装了端口和IP地址。

       通信两端都有Socket.    网络通信其实就是Socket通信。   网路编程也叫Socket编程或套接字编程

三、InetAddress类

   它是一个IP地址包装类,没有构造方法,找静态方法直接使用类名调用或找静态方法中返回值是InerAddress.通过这个方法获取对象

     方法:  public static  InetAddress getByName(String host)// 通过主机名取的IP地址(对象形式)

                 public String getHostAddress()//    返回IP地址字符串 

                 public String getHostName()  //根据IP获取主机名字

 

四、UDP 接收数据

       1.发送数据

               思路:   1.建立发送端Socket服务对象

                              2.创建数据,并装包

                               3.放送数据

                             4,释放资源      

   class  sendData{

              public static void main(String[] args){

                DatagramSocket  ds  = new  DatagramSocket;//封装数据源

                     String  str = "hello";//创建数据

                 byte[] bytes = str.gerBytes();

                int length = bytes.length();

               InetAddress  adress =  InesAddress.getByName(192.168.2.4);             

                int port = 123;

                DatagramPacket dp = new DatagramPacket(bytes,lenght,address,port);//创建包

                    ds.seng(dp);//放松数据

                    ds.close();//释放资源

}

}

    2.接收数据。

           思路:1.建立接收端Socket服务对象

                       2.创建数据包

                       3.调用接收方法。

                        4,解析数据包,把数据显示在控制台上,

                       5,释放资源

代码:

 class ReceiveData{

        publci static void main (String[] str){

             DatagramSocket ds = new DatagramSocket(123);// 创建接收端对象

              byte[] bytes = new byte[1024];

             int lenght = bytes.lenght;

              DatagramPacket dp = new DatagramPacket( bytes,lenght);//创建数据包

                    ds.receive(dp);//调用接收方法

             InerAddress address = dp.getAddress();

            String ip = address.getHostAddress() ;

         byte[] bytes1= dp.getData();//解析数据

             Stirng str = new String( bytes,o,bytes.lenght);

             system.out.println(ip+..........+str);

              ds.close();//释放资源   

}

}

 

  五、TCP协议

     1.客户端:、

                思路:1.:创建客户端的Socket对象 
                            2.:建立连接
                            3.:获取输出流,写数据即可
                            4.:释放资源

      代码:

public class ClientDemo {
       public static void main(String[] args) throws IOException {
       // 创建客户端的Socket对象,建立连接
          Socket s = new Socket("192.168.3.100", 10010);

  // 获取输出流,写数据即可
  // public OutputStream getOutputStream()
  OutputStream os = s.getOutputStream();
  os.write("hello,tcp,我来了".getBytes());

  // 释放资源
  s.close();
 }

    2.服务器

         思路:

                           1.创建服务器端Socket对象
                           2.:监听连接 
                            3.:获取输入流,读取数据,并显示
                             4.释放资源
public class ServerDemo {
       public static void main(String[] args) throws IOException {
               // 创建服务器端Socket对象
                 ServerSocket ss = new ServerSocket(10010);

                 // 监听连接
                  Socket s = ss.accept();//阻塞

                // 获取输入流,读取数据,并显示
                  InputStream is = s.getInputStream();
                   byte[] bys = new byte[1024];
                   int len = is.read(bys);//阻塞
                 String client = new String(bys, 0, len);
                   System.out.println(client);

                  // 释放资源
             s.close();  
 }
}


 

 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值