• java 网络编程(一)---基础知识和概念了解


       java 为用户提供了十分完善的网络功能:

    1. 获取网络上的各种资源(URL)

    2. 与服务器建立连接和通信(ServerSocket和Socket)

    3. 无连接传递本地数据(DatagramSocket)

        所有的这些有关功能都定义在java.net包中,下面详细的介绍下:

    第一: URL:通过URL网络资源的表达形式确定数据在网络中的位置,利用URL对象中提供的相关方法,直接读入网络中的数据,将本地数据传输到网络的另一端。

        下面的例子是使用URL对象获取本地某程序的配置文件并打印。

    第二. Socket:两个程序在网络上的通信连接。较为常用。是通过使用流的模式来实现的,一个接口同时有2个流,一个输入流,一个输出流;当一个进程向另一个进程发送数据时,只需要将数据写入到相应接口的输出流里,而另一进程在接口的输入流里读取数据即可。

    A. ServerSocket:编写TCP网络服务程序,首先要用到java.net.ServerSocket类用以创建服务器Socket

    a.   构造方法:

        ServerSocket(int port):创建绑定到特定端口的服务器套接字

        ServerSocket(int port, int backlog):利用指定的backlog(服务器忙时保持连接请求的等待客户数量),创建服务器套接字并将其绑定到指定的本地端口号。

        ServerSocket(int port, int backlog, InetAddress bindAddr):使用指定的端口、侦听 backlog和要绑定到的本地 IP地址创建服务器。

    B.  Socket:客户端要与服务器建立连接,必须先创建一个Socket对象

    a. 常用构造方法

       Socket(String host, int port):创建一个流套接字并将其连接到指定主机上的指定端口号。

       Socket(InetAddress address, int port):创建一个流套接字并将其连接到指定 IP地址的指定端口号。

       服务器端程序调用ServerSocket类中的accept()方法等待客户端的连接请求,一旦accept()接收了客户端连接请求,该方法返回一个与该客户端建立了专线连接的Socket对象,不用程序去创建这个Socket对象。建立了连接的两个Socket是以IO流的方式进行数据交换的,Java提供了Socket类中的getInputStream()返回Socket的输入流对象,getOutputStream()返回Socket的输出流对象。

    第三:DatagramSocket,是最低级的,无连接的,以数据报的方式工作通信。因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如聊天用的ICQ和OICQ就是使用的UDP协议。 

    A.  DatagramSocket类:创建接收和发送UDP的Socket实例

         DatagramSocket():创建实例。通常用于客户端编程,它并没有特定监听的端口,仅仅使用一个临时的。

         DatagramSocket(int port):创建实例,并固定监听Port端口的报文。

         DatagramSocket(int port, InetAddress localAddr):这是个非常有用的构建器,当一台机器拥有多于一个IP地址的时候,由它创建的实例仅仅接收来自LocalAddr的报文。

    注意:在创建DatagramSocket类实例时,如果端口已经被使用,会产生一个SocketException的异常抛出,并导致程序非法终止,这个异常应该注意捕获.常用的方法如下:

       receive(DatagramPacket d):接收数据报文到d中。receive方法产生一个“阻塞”。

       send(DatagramPacket d):发送报文d到目的地。

       setSoTimeout(int timeout):设置超时时间,单位为毫秒。

        close():关闭DatagramSocket。在应用程序退出的时候,通常会主动释放资源,关闭Socket,但是由于异常地退出可能造成资源无法回收。所以,应该在程序完成时,主动使用此方法关闭Socket,或在捕获到异常抛出后关闭Socket。“阻塞”是一个专业名词,它会产生一个内部循环,使程序暂停在这个地方,直到一个条件触发。

    B. DatagramPacket:用于处理报文,将byte数组、目标地址、目标端口等数据包装成报文或者将报文拆卸成byte数组。

       DatagramPacket(byte[] buf, int length, InetAddress addr, int port):从buf数组中,取出length长的数据创建数据包对象,目标是addr地址,port端口。

        DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port):从buf数组中,取出offset开始的、length长的数据创建数据包对象,目标是addr地址,port端口。

        DatagramPacket(byte[] buf, int offset, int length):将数据包中从offset开始、length长的数据装进buf数组。

        DatagramPacket(byte[] buf, int length):将数据包中length长的数据装进buf数组。

       常用方法:

        getData():它从实例中取得报文的byte数组编码。

  • 相关阅读:
    Atitit 华为基本法 attilax读后感
    Atitit 华为管理者内训书系 以奋斗者为本 华为公司人力资源管理纲要 attilax读后感
    Atitit 项目版本管理gitflow 与 Forking的对比与使用
    Atitit 管理的模式扁平化管理 金字塔 直线型管理 垂直管理 水平管理 矩阵式管理 网状式样管理 多头管理 双头管理
    Atitit 乌合之众读后感attilax总结 与读后感结构规范总结
    深入理解 JavaScript 异步系列(4)—— Generator
    深入理解 JavaScript 异步系列(3)—— ES6 中的 Promise
    深入理解 JavaScript 异步系列(2)—— jquery的解决方案
    深入理解 JavaScript 异步系列(1)——基础
    使用 github + jekyll 搭建个人博客
  • 原文地址:https://www.cnblogs.com/loleina/p/5171160.html
Copyright © 2020-2023  润新知