zoukankan      html  css  js  c++  java
  • 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数组编码。

  • 相关阅读:
    英语语法总结---二、英语中的从句是怎么回事
    【Cocos得知】技术要点通常的积累
    政府采购清单应包括“问题” 积
    Ubuntu通过使用PyCharm 进行调试 Odoo 8.0 可能出现的问题
    Android自己定义组件系列【8】——面膜文字动画
    手机新闻网站,手持移动新闻,手机报client,jQuery Mobile手机新闻网站,手机新闻网站demo,新闻阅读器开发
    OS和android游戏纹理优化和内存优化(cocos2d-x)
    删除重复数据
    MyEclipse2014 设备 checkstyle、PMD、findbugs 最简单的方法 详细说明
    hdu5044 Tree 树链拆分,点细分,刚,非递归版本
  • 原文地址:https://www.cnblogs.com/loleina/p/5171160.html
Copyright © 2011-2022 走看看