代码改变世界

黑马程序员-网络1

2014-06-06 18:20  黑马程序员*  阅读(140)  评论(0)    收藏  举报

三要素:IP,端口,协议

       1.找到对方IP

       2.数据要发送到对方指定的应用程序。为了标示这些应用程序,

       所以给这些网络应用程序都用数字进行标示。

       为了方便称呼这个数字,叫做端口,逻辑端口。

       3.定义通信规则。这个通讯规则称为协议。

IP地址 InetAddress

       --网络中设备的标示

       --不易记忆,可用主机名

       --本地地址:127.0.0.1 主机名:localhost

端口号

       --用于标示进程的逻辑地址,不同进程的数字标示

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

传输协议

       --通讯的规则

       --常见协议:TCP,UDP

国际组织定义了通用协议TCP/IP.

       OSI:Open System Interconnection   UDP:User Datagram Protocol

       网络参考模型

       OSI 参考模型:TCP/IP参考模型 Transmission Control Protocol  

       应用层                  同下

       表示层          应用层

       会话层                  同上             

       传输层                  传输层

       网络层                  网际层

       数据链路层           同上

       物理层                  --主机至网络层

类InetAddress

       此类表示互联网协议 (IP) 地址。

       特点:无构造方法。

       常用方法;

              InetAddress getLocalHost()

           getHostName();

           getHostAddress()         

       获取任意·主机ip地址

       static InetAddress getByName(String host)

               在给定主机名的情况下确定主机的 IP 地址。

               主机名可以是机器名(如 "java.sun.com"),

               也可以是其 IP 地址的文本表示形式。

       static InetAddress getByAddress(byte[] addr) //不常用

               在给定原始 IP 地址的情况下,返回 InetAddress 对象。

两种传输方式基本概念:

       UDP:user Datagram Protocol

              特点:1.面向无连接 2.不可靠 3.不需要建立连接,速度快。 4.数据都封包,包体不超过64k

              应用:聊天,视频会议

              什么是面向无连接?无需握手,不关对方在不在,我就是发送数据。类似对讲机。

       TCP:Transmission control protecl

              特点:1.面向连接2.通过三次握手,协议可靠3.效率低4.可以进行大数据量传输。

       UDP和TCPd的区别:

              UDP:对讲机 ,对方开了,接到包。不开,数据丢失

              TCP:打电话 ,指定对象,打开电话请求连接,进行通话。 

       Socket是什么?

              通常叫做套接字,用于描述IP地址和端口。应用程序通过Socket向网路发送或请求     *

              形象比喻:连个插口,连接两台电脑,通过网络通信。

       Socket:相当于插座,码头。

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

              通信的两端都是socket

              网络通信其实就是socket间的通信。两个码头间的通航

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

UDP传输:

       每个协议都有自己的特有传输方式。       *

类 Datagramsocket:UDP使用

       特点:即能接收也能发送。所以两端都要有DatagramSocket

       构造方法:要有本方和对方的地址(InetAddress)和端口。

       发送和接受数据包。都是阻塞是方法。

       send(DatagramPacket p)

       receive(DatagramPacket)

类 DatagramPacket:此类表示数据包

       发送的构造函数:DatagramPacket(byte[] buf, int length, InetAddress address, int port)  

       接受的构造函数:DatagramPacket(byte[] buf, 0int length)

常用方法:

       InetAddress getAddress()

       byte[] getDate()

       int getPort();

练习:UDP发送数据

       思路:1.建立UDP服务2.封装包3.发送4.关闭资源

       练习:UDP接收数据 可以使用while(true)实现一直接收,因为reiceive是阻塞式,所以不会死循环。

       思路:1.建立UDP服务(通常会监听一个端口)2.定义缓冲区3.接收4.获取ip,内容等。5.关闭资源。

       练习:制作聊天软件,可以发送,可以接受 使用多线程。使用Socket     

TCP传输:

       UDP;发送端和接收端

       TCP:服务端和客户端。Socket ServerSocket       

客户端:

        1.创建Socket服务,并指定要连接的主机和端口。

        2.发送数据,即写入流。先获得流。getOutputStream()

        3.关闭资源,不用关流。

服务端:

        1.建立服务端ServerSocket服务。并监听一个端口。

        2.获取连接过来的客户端对象。通过accept方法。

        3.使用获取的客户端对象,使用读取流,读取。

        4.关闭服务端,可选。

TCP传输的常见问题。 

        用户或服务端写入时(如键盘录入),虽然写完了,但是没有写入结束标记(如换行)。

        导致两端都在等待。因为客户端和服务端都有阻塞式方法。

        如:readLine()方法。只有读到行终止符时,才会将读到的数据刷新出去。

        怎么解决:shutdownInput  shutdownOutput  也可以用printStream的换行。

        注意:客户端结束后,服务端也会结束,为什么?因为客户端结束后s.close(),

              会在socket流中加了一个-1结束标志。服务端的所有read方法,如readline等,

              底层都是调用了read方法,在读到-1标志后,服务端也结束。

       练习:键盘录入TCP,客户端发送给服务端纯文本,服务端返回“收到”

       注意:在写入数据的时候注意是否写入了终止符。