---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
三要素: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,客户端发送给服务端纯文本,服务端返回“收到”
注意:在写入数据的时候注意是否写入了终止符。
---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
详细请查看:<a href="http://www.itheima.com" target="blank">www.itheima.com</a>