黑马程序员(八)网络编程

来源:互联网 发布:淘宝免单网 编辑:程序博客网 时间:2024/06/08 01:21

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

网络编程

网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机。数据传递本身没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然后接受另外一个设备反馈的数据。现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另外一个,然后接收另一个设备的反馈。在网络编程中,发起连接程序,也就是发送第一次请求的程序,被称作客户端(Client),等待其他程序连接的程序被称作服务器(Server)。客户端程序可以在需要的时候启动,而服务器为了能够时刻相应连接,则需要一直启动。

例如以打电话为例,首先拨号的人类似于客户端,接听电话的人必须保持电话畅通类似于服务器。连接一旦建立以后,就客户端和服务器端就可以进行数据传递了,而且两者的身份是等价的。在一些程序中,程序既有客户端功能也有服务器端功能,最常见的软件就是BT、emule 这类软件了。


网络编程:就是用语言(java)实现多台计算机的通信

三大要素:

A:IP地址。

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

 

B:端口

      用于标识进程的逻辑地址

 

C:协议

      定义通信规则


举例:

      我要和小明说话。

      A:找到小明

     B:小明用耳朵接收。

    C:我说家乡话,你觉得他能听懂吗。


IP地址:

      计算机的唯一标识。

     给出一个十进制的数值:

            192.168.3.100

      而它在网络中实际上是如下表示的:

            11000000 10101000 00000011 01100100

      为什么我们不是采用下面这种方式配置ip的呢?

            如果采用二进制,不方便记忆。

            所以,为了方便记忆,把这种表示形式做了改进:"点分十进制"


  IP地址的分类:

            A类      1.0.0.1---127.255.255.254 (1)10.X.X.X是私有地址(私有地址就是在互联网上不使用,而被用在局域网络中的地址) (2)127.X.X.X是保留地址,用做循环测试用的。

            B类      128.0.0.1---191.255.255.254   172.16.0.0---172.31.255.255是私有地址。169.254.X.X是保留地址。

            C类      192.0.0.1---223.255.255.254   192.168.X.X是私有地址

            D类      224.0.0.1---239.255.255.254 

            E类      240.0.0.1---247.255.255.254  

           

   IP地址的组成:

            IP地址 = 网络号码+主机地址

            A类IP地址:第一段号码为网络号码,剩下的三段号码为本地计算机的号码

                  256*256*256   ---   16777216

            B类IP地址:前二段号码为网络号码,剩下的二段号码为本地计算机的号码

                  256*256    ---   65536

            C类IP地址:前三段号码为网络号码,剩下的一段号码为本地计算机的号码

                  256

      查看本机IP:ipconfig   // ipconfig /all 获取全部的电脑信息

      查看网络是否有问题 ping+IP地址

                        ping 127.0.0.1(本机回环地址)       

端口:

      逻辑端口 我们指的就是逻辑端口

      A:每个网络程序都会至少有一个逻辑端口

      B:用于标识进程的逻辑地址,不同进程的标识不一样

      C:有效端口:0~65535,其中0~1024系统使用或保留端口。

      通过360可以查看端口号

     

网络通信协议:

在计算机网络中,连接和通信的规则被称为网路通信协议,网络通信协议有很多种,目前应用最广泛的是TCP和UDP两种

TCP和UDP的联系和用途

一.区别
     
  二者都是有用的和常用的,如果纯粹从概念上区分二者就比较费解了,我们直接从功能上进行区分,简单明了: 
       这两种传输协议也就是合于适配不同的业务和不同的硬件终端。 
       在使用中,类似于图像、声音等对可靠性要求没有那么高的业务可以用UDP,他们不需要准确存储对准确性无要求但要求速度快。      
       类似于文本、程序、文件等要求可靠的数据最好就用TCP,但会牺牲一些速度。 
       对系统资源的要求:CP较多,UDP少。 
       程序结构:UDP程序结构较简单,TCP复杂。 
       流模式与数据报模式:TCP保证数据正确性,UDP可能丢包; TCP保证数据顺序,UDP不保证

二.用途
       TCP是面向连接的,有比较高的可靠性,一些要求比较高的服务一般使用这个协议,如FTP、Telnet、SMTP、HTTP、POP3等,而 UDP是面向无连接的,使用这个协议的常见服务有DNS、SNMP、QQ等。对于QQ必须另外说明一下,QQ2003以前是只使用UDP协议的,其服务器 使用8000端口,侦听是否有信息传来,客户端使用4000端口,向外发送信息(这也就不难理解在一般的显IP的QQ版本中显示好友的IP地址信息中端口 常为4000或其后续端口的原因了),即QQ程序既接受服务又提供服务,在以后的QQ版本中也支持使用TCP协议了。 
       Udp是一种面向无连接的通信协议,该协议使得数据传输的速度得到大幅度的提高。视频聊天语音聊天基本都是用UPD协议。

      定义的规则

            TCP

                  建立连接通道

                  数据无限制

                  面向连接(三次握手)

                  可靠

                  速度慢

TCP客户端:

1 建立tcp的socket服务,最好明确具体的地址和端口。这个对象在创建时,就已经可以对指定ip和端口进行连接(三次握手)

2 如果连接成功,就意味着通道建立了,socket流就已经产生了。只要获取到socket

 流中的读取流和写入流即可,只要通过getInputStream和getOutputStream就可以获取两个流对象

3关闭资源

TCP服务端:

1 创建服务端socket服务,并监听一个端口。

2 服务端为了给客户端提供服务,获取客户端的内容,可以通过accept方法获取连接过来的客户端对象。

3 可以通过获取到的socket对象中的socket流和具体的客户端进行通讯。

4 如果通讯结束,关闭资源。注意:要先关客户端,再关服务端。


 代码:


 UDP

         把数据打包

         数据有限制

         面向无连接

         不可靠

          速度快

udp的发送端:

1建立udp的socket服务,创建对象时如果没有明确端口,系统会自动分配一个未被使用的端口。

2明确要发送的具体数据。

3将数据封装成了数据包。

4用socket服务的send方法将数据包发送出去。

5关闭资源。

 

udp的接收端:

1创建udp的socket服务,必须要明确一个端口,作用在于,只有发送到这个端口的数据才是这个接收端可以处理的数据。

2定义数据包,用于存储接收到数据。

3通过socket服务的接收方法将收到的数据存储到数据包中。

4通过数据包的方法获取数据包中的具体数据内容,比如ip、端口、数据等等。

关闭资源。


代码    


我的总结:对于UDPTCP,既可以定义输出流也可以创建输入流,具体情况根据需要构建;比如:我们需要客户端给服务器端发送数据,服务器端再给客户端反馈数据;那么就要在客户端和服务器端分别多加一个输入流和输出流!否则,发不出去,收不到!


InetAddress与Socket

InetAddress:构造方法私有,不能直接创建对象。

InetAddressgetByName(String host):在给定主机名的情况下确定主机的ip地址

InetAddress getLocalHost():返回本地主机。

InetAddress[] getAllByName(String host)

ip.getHostName()

 

Socket

Socket就是为网络服务提供的一种机制。

通信的两端都有Socket。

网络通信其实就是Socket间的通信。

数据在两个Socket间通过IO传输。







0 0
原创粉丝点击