java网络通信

java已经将网络程序所需要的东西封装成不同的类,只要创建这些类的对象,使用相应的方法,就可以实现网络通信。

服务器-----------网络-----------客户机。服务器是指提供信息的计算机或程序,客户机是指请求信息的计算机或程序,通常所说的“局域网”(local Area Network)LAN ,是一群通过一定形式连接起来的计算机,LAN延伸到更大的范围,这样的网络称为“广局网”(wide Area network)WAN ,人们熟悉的internet则是由无数的LAN和WAN组成。LAN是由特定类型的传输媒体(如电缆、光缆和无线媒体)和网络适配器(亦称为网卡)互连在一起的计算机,并受网络操作系统监控的网络系统。

网络协议:规定了计算机之间的物理,机械(网线与网卡的连接规定),电气(有效的电平范围)等特征以及计算机之间的相互寻址规则,数据发送冲突的解决,长的数据如何分段传送与接收,

1.IP协议:iternet protocol 的简称,由此可知它就是一种“网络协议”,internet网络采用的协议是TCP/IP协议。全称是Transmission control protocol / internet protocol。在internet网上存在数以亿计的主机,每一台主机在网络上通过为其分配的internet地址表示自己,这个地址就是IP地址,目前为止,IP地址用4个字节,也就是32位二级制数表示,称为IPv4.为了便于使用,通常取用每4个字节的十进制数并每个字节间用圆点隔开来表示IP地址,如192.168.1.1.现在人们正在试验用16个字节来表示IP地址,这就是IPv6,但IPv6还没投入使用。Tcp/IP是一种层次结构,共分为4层,分别为:应用层,传输层,互联网层,主机到网络层。

2.TCP与UDP协议:在TCP/IP协议栈(是指网络中各层协议的总和)中,

TCP(传输控制协议 Transmission Control Protocol)和UDP(用户数据报协议 User Datagram protocol)应该了解。TCP可以保证数据从一端送至连接的另一端时能够确实送达,而且抵达的顺序和送出时的顺序相同,因此TCP协议更适合可靠性要求比较高的场合,就像拨打电话一样,必须先拨打对方号码。等两端连接后才能听到对方说话。HTTP。FTP和Telent 等都需要使用可靠的通信频道,例如HTTP从某个URL读取数据时,如果收到的数据顺序与发送时的顺序不同,可能会出现一个混乱的HTML文件或一些无效的信息,UDP是无连接通信协议,不保证可靠数据的传输,担能够向若干个目标发送数据,接收发自若干个源数据,UDP是以独立发送数据包的方式进行,就像邮递员送信给收信人,可以寄出很多信给同一个人,每一个信都是独立的,信到达的顺序不重要,UDP应用于一些对数据准确性要求不高的场合,如网络聊天室,在线影片,由于TCP协议在认证上存在额外耗费,有可能使传输速度减慢,UDP协议可能会更适合对传输速度要求较高的网站,有可能会丢包,即使有一小部分数据包的遗失或传送顺序有所不同,并不严重危害通信。一些防火墙和路由器会设置成不允许UDP数据包传输,

端口和套接字:一般而言,一台计算机只有单一的连接到网络的“物理连接(physical connection)”所有的数据都通过此连接对内,外送达特定计算机,这就是端口,网络程序设计中的端口(prot)并非真实的物理存在,而是一个假象的连接装置,端口被规定为一个在0-65535之间的整数,HTTP服务一般使用80端口,FTP一般使用21端口,假如一台计算机提供了HTTP,FTP等多种服务,那么客机通过不同的端口来确定连接到服务器的哪项服务上,通常0-1023之间的端口数用于一些知名的网络服务和应用,用户的普通网络应用程序应该使用1024以上的端口数,以避免端口号与另一个应用或系统服务所用端口冲突,网络中的套接字(socket)用于将应用程序与端口连接起来,套接字是一个假象的连接装置,就像插座,连接电线与电器,java将套接字抽象化为类程序设计者只需创建Socket类对象,

TCP设计基础:1.服务器程序创建一个serverSocket(服务器端套接字),调用accept()方法等待客户机来连接。2.客户端程序创建一个socket,请求与服务器建立连接。3.服务器接收客户机的连接请求,同时创建一个新的socket与客户建立连接,服务器继续等待新的请求。

java,net包中的InetAddress类是与IP地址相关的类,利用该类可以获取IP地址,主机地址等信息。此类会抛出UnknowHostException异常,这个异常在主机不存在或网络连接错误时发生。

        InetAddress ip;
        
        try
        {
            ip = InetAddress.getLocalHost();
            String localname = ip.getHostName();
            String localip = ip.getHostAddress();
            System.out.println("本机名" + localname);
            System.out.println("本机IP" + localip);
        } 
        catch (Exception e) 
        {
            // TODO: handle exception
            e.printStackTrace();
        }

serverSocket类:java。net包中的serverSocket类用于表示服务器套接字,其主要功能是等待来自网络的“请求”,它可以通过指定的端口来等待连接的套接字,服务器套接字一次可以与一个套接字连接,如果多台客户机同时请求,服务器套接字会将请求连接的客户机存在队列中,然后依次连接,若请求数大于最大容量,则多出的请求被拒绝,队列大小默认50,下面backlog即为队列容量。

调用serverSocket类的accept()方法,如果有客户端连接,创建一个套接字socket,服务端和客户端都通过getoutputStream()获得输出流对象,getinputStream()方法获取输入流对象,

在结束运行时要关闭socket和reader。当一台机器上安装了多个网络应用程序,很可能指定的端口号已被占用,此时运行netstat - help来获得帮助,使用netstat -an来查看该程序所使用的端口,

UDP(用户数据报协议)

使用UDP时,用户无法知道数据能否正确的到达主机,也不能确定到达目的地顺序,担速度较快,模式:将数据打包,然后将数据包发往目的地。接收别人发来的包,然后查看数据包。

DatagramPacket类:java。net包内, 表示数据包,构造函数,DatagramPacket(byte[] buf, int lenght, InetAddress address, int port)制定了数据包的内存空间和大小,还有目标地址和端口。

DatagramSocket类:java。net包内,表示发送和接收数据包的套接字,构造函数:DatagramSocket(int port, inetAddress)创建数据抱套接字将其绑定到指定的本地地址和端口(适用于多块网卡和多个IP情况),如果没有参数那就是将套接字绑定到本地主机任何可用的端口。、

猜你喜欢

转载自blog.csdn.net/weixin_39407066/article/details/81173778