zoukankan      html  css  js  c++  java
  • 黑马程序员——网络编程知识点总结

    ---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------


    进行网络通信需要的三要素:ip、端口、协议
    IP      连接在internet中每台主机地址的标识,32bit。
    //获取IP
    InetAddress i = InetAddreass.getLocalHost();

    InetAddress ia = InetAddreass.getByName("www.baidu.com");
    sop("address:"+ia.getHostAddreass());
    sop("name:"+ia.getHostName());


    端口:   

    1、网络设备接口(集线器、交换机、路由器)----物理

    2、TCP/IP协议中的接口.----逻辑
    0~65535
    0~1024

    ..计算机运行程序的标识

    协议:
    UDP:
    将数据、源、目的封装成数据包,不需要建立连接
    每个数据包限制在64K内
    因无连接,是不可靠协议
    不需要建立连接,速度快
    TCP:
    建立连接,形成传输数据的通道
    在连接中进行大数据量传输
    通过三次握手完成连接,是可靠协议
    必须建立连接,是可靠协议

    InetAddress类:
    基本方法列举
    getAddress()返回此 InetAddress 对象的原始 IP 地址。
    getHostAddress()返回 IP 地址字符串(以文本表现形式)。
    getHostName()获取此 IP 地址的主机名。
    getAllByName(String host)在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。
    getByName(String host)在给定主机名的情况下确定主机的 IP 地址。
    getLocalHost()返回本地主机。
    isReachable(int timeout)测试是否可以达到该地址。


    DatagramPacket类
    需求:通过UDP传输协议将一段文字数据发送出去
    思路:
    1、建立udpSocket服务
    2、提供数据并将数据封装到数据包中
    3、通过Socket服务的发送功能将数据发送出去
    4、关闭资源



    面向Socket编程
    Socket就是为网络服务提供的一种机制,对应于网络中的传输层,通信的两端都有Socket,网络通信其实就是Socket间的通信,数据在两个Socket间通过IO传输。
    无论是UDP的面向连接还是TCP的面向连接,我们面向的其实都是Socket。

    Socket中的一些常用方法:
    bind(SocketAddress bindpoint)将套接字绑定到本地地址。
    connect(SocketAddress endpoint)&connect(SocketAddress endpoint, int timeout)将此套接字连接到服务器,且后者可以指定一个超时值。
    getInetAddress()&getPort() 返回套接字连接的远程地址及端口。 
    getLocalAddress()&getLocalPort()获取套接字绑定的本地地址即端口。
    getInputStream()&getOutputStream()返回此套接字的输入输出流。
    shutdownInput()&shutdownOutput()禁用此套接字的输入流与输出流,即使同时调用了两方法也不能导致Socket关闭,另外shutdownOutput()方法通常用于告知服务端客户端发送结束。



    URL类:
    类URL代表一个统一资源定位符,它是指向互联网“资源”的指针。使用该类的openConnection()方法即可获取对应的URLConnection对象,也可以通过openStream()方法直接获取其所指向资源的输入流。
    它也提供了一系列的get方法来提取封装在URL对象中的信息
    URL中的基本方法:
    getFile()获取此 URL 的文件名。
    getHost()获取此 URL 的主机名(如果适用)。 
    getPath()获取此 URL 的路径部分。 
    getPort()获取此 URL 的端口号。 
    getProtocol()获取此 URL 的协议名称。 
    getQuery()获取此 URL 的查询部分。 
    URLConnection它代表应用程序和 URL之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。
    创建一个到URL的连接需要几个步骤:
    1、通过在 URL 上调用 openConnection 方法创建连接对象。 
    2、处理设置参数和一般请求属性。 
    3、使用 connect 方法建立到远程对象的实际连接。 
    4、远程对象变为可用,远程对象的头字段和内容变为可访问。


    UDP实现发送和接收数据操作
    发送端代码实例:

    import java.io.*;
    import java.net.*;
    class UdpSend{
       public static void main(String args[]) throws Excption{
       DatagramSocket ds = new DatagramSocket();
       byte[] buf = "abcde".getByte();
       DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddreass.getByName(" 127.0.0.1 "), 10000);
       ds.send(dp);
       ds.close();
       }
    }


    接收端代码实例:

    import java.io.*;
    import java.net.*;
    class UdpReve{
       public static void main(String args[]) throws Excption{
       DatagramSocket ds = new DatagramSocket(10000);
       byte[] buf = new byte[1024];
       DatagramPacket dp = new DatagramPacket(buf, buf.length);
       ds.receive(dp);
       String ip = dp.getAddress().getHostAddress();
       String data = new String(dp.getDate(), 0, dp.getLength());
       int port = dp.getPort();
       System.out.println(ip+ "--" +data+ "--" +port);
       ds.close();
       }
    }
    
    	//使用while(true)使接收端持续开启

    练习:将本地图片上传到服务器,代码实现:

    客户端代码实现:

    public class PicClient {
    	
    	public static void main(String args[]) throws Exception{
    		Socket s = new Socket("117.84.140.104", 10001);
    		FileInputStream fis = new FileInputStream("C:\Users\Administrator\Desktop\1.jpg");
    		OutputStream out = s.getOutputStream();
    		byte[] buf = new byte[1024];
    		int ch = 0;
    		while((ch = fis.read(buf)) != -1){
    			out.write(buf, 0, ch);
    		}
    		s.shutdownOutput();
    		InputStream in = s.getInputStream();
    		ch = in.read(buf);
    		System.out.println(new String(buf, 0, ch));
    		fis.close();
    		s.close();
    	}
    }


    服务器端代码实现:

    public class PicServer {
    
    	public static void main(String args[]) throws Exception{
    		ServerSocket ss = new ServerSocket(10001);
    		Socket s = ss.accept();
    		InputStream in = s.getInputStream();
    		FileOutputStream fis = new FileOutputStream("C:\Users\Administrator\Desktop\2.jpg");
    		byte[] buf = new byte[1024];
    		int len = 0;
    		while((len = in.read(buf)) != -1){
    			fis.write(buf, 0, len);
    		}
    		OutputStream out = s.getOutputStream();
    		out.write("上传完毕".getBytes());
    	}
    }




    ---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------
    用心-细心-专心-决心 学习就像爬大山,一步一步向前走 -态度决定高度-
  • 相关阅读:
    盛京剑客系列21:再强调一遍:机会在MSCI成份,别走偏了
    盛京剑客系列20:平仓中兴通讯,获利45.51%,继续加仓优质个股
    盛京剑客系列19:推书《战胜华尔街》
    盛京剑客系列18:很多人因为恐惧脚下的小土坑,却丢掉了一米远处的大金矿
    盛京剑客系列17:市场暴跌下投资组合的调整
    盛京剑客系列16:推书《股市稳赚》
    盛京剑客系列15:割韭秘籍
    盛京剑客系列14:对高估值医药股要谨慎
    盛京剑客系列13:披露指数的密码,曙光就在前方
    leetcode -- Longest Valid Parentheses
  • 原文地址:https://www.cnblogs.com/xianyou-liang/p/8503358.html
Copyright © 2011-2022 走看看