网络开发技术基础听课笔记

来源:互联网 发布:淘宝运作流程图 编辑:程序博客网 时间:2024/05/22 14:07

在计算机网络中,为了标识每一台计算机,有必要给每一台计算机一个唯一的地址。

计算机中有网络设备–网卡,网卡中都拥有一个地址,称之为MAC地址,又称为物理地址。
当前计算机网络中,TCP/IP是应用最广泛的通讯协议,在这个协议族中给计算机所分配的地址,称之为IP地址。
根据地址位数的不同,分为两种IP地址,IPV4和IPV6;

概念:IPEndPoint
所有连接在网络上的计算机都有一个唯一的IP地址,它用于区分开网络上的不同计算机。
同时,一台网络计算机上可能运行着多个网络应用程序,它们可能会使用同一个网络接口从网络中接受(or发送)数据,因而共享同一个IP地址,在这种情况下,如何将到达主机的数据包转发给真正的相应的“需求者”?
为了解决这个问题,TCP/IP协议设计者引入了“端口(Port)”这个概念,规定:每个提供网络服务的应用程序都必须指定一个“端口”,不同的网络应用程序不能使用相同的端口。

网络数据包之洋葱结构。真正的信息被TCP、IP、Ethernet一层一层包裹,然后发送。

IP地址与端口唯一地标识了一个网络中的应用程序,将这个组合称之为“IP终结点(IP EndPoint)”
IPEndPoint = IP + Port
IP EndPoint代表一个网络服务的访问点。若想访问另外一台计算机所提供的的网络服务,就需要知道IPEndPoint,知道IPEndPoint之后,就可以创建Socket…..

Socket与网络编程
基于TCP/IP协议开发网络应用程序,应用程序之间主要通过Socket交换数据。

学习Socket的必要性:
开发特殊的原生服务端应用时,要用到Socket.
通过学习Socket编程,能对TCP/IP协议有深刻的理解,所掌握的知识能顺利的迁移到诸多平台。
更好的理解把握其上层的网络通讯协议(如HTTP)和各种网络应用层技术。

Socket概述
Socket是实现网络应用程序之间交换信息的关键。
从信息的发送与接收角度,Socket分为两类:
Server端Socket:它在指定的端口上监听,等待客户端的连接请求,并且向客户端发送或接收数据。
Client端Socket:它尝试连接Server端的Socket,在连接成功之后,与Server端应用相互收发数据。

服务端Socket
创建Socket对象:指定使用的IP地址类型,如IPv4或者IPv6,指定使用的socketType,使用的协议,如TCP。
绑定:绑定IP终结点 bind

什么是绑定(Bind)?
在Socket应用程序中,绑定的作用是让某个Socket对象关联上特定的网络接口(Network Interface)–可理解为网卡。
一台网络主机可能安装有多个网络接口,绑定之后,Socket对象将可以在IPEndPoint所对应的那个网络接口上监听。

什么是监听(Listen)
所谓监听,其实就是告诉操作系统,我关心本机某个网络接口上的的数据包,当有数据包到达,并且端口号和我的一致,请通知我。
Socket对象的Listen方法在绑定的IPEndPoint上启动监听:server.Listen(10);参数的的意思是这个IP终结点上面,所能接收的,连接请求的最大的请求数目。也就是说,某个Socket关联上了某个IP终结点之后,那么操作系统会为这个Socket配备一个连接请求队列。在Listen()这个方法中传入的参数,告诉操作系统,所创建的队列,最多保留a个请求的队列,多了就不理会了。

响应连接请求
如果有客户端的连接请求,服务端Socket的Accept()方法获取与此请求响应的Socket,准备实现数据交换:
Socket client = server.Accept();
Accept()方法会返回一个Socket,所返回的这个Socket不能用于接收新的连接,但返回的这个Socket与客户端的Socket可以构建一个数据通路,用于接收和发送数据,同时,其RemoteEndPoint方法可以获取远程客户端的IP地址和端口。只有两个Socket配对之后,才能。。。

如果客户端向服务端发来了数据,这些数据一定要放到一个缓冲区之中,在网络应用程序中,通常使用字节数组来保存数据。特别要注意的是,要预先估计客户端送来的数据的大小,为其分配足够大小的缓冲区。
服务端Socket接收数据
将接收到的数据保存到事先准备好的数据缓冲区:
byte[] data = new byte[BufferSize];
int recv = client.Receive(data);
处理接收到的数据:
Console.WrintLine( Encoding.UTF8.GetString(data, 0, recv)); 示例程序中,直接输出到Console。

关闭Socket
完成数据传送任务之后,注意应该及时地关闭Socket。
通常分为两步:
1.调用Shutdown方法通知TCP/IP协议栈发送所有未发送的数据,或停止接收数据。
2.调用close()方法关闭套接字。
socket.Shutdown(SocketShutdown.Both);
socket.Close();

客户端Socket
客户端必须首先创建好Socket对象,然后再调用其Connect方法创建到服务端的连接,如果之前Socket没有使用Bind方法指定一个端口,Connect方法会自动选择一个未用的端口:
Socket server = new Socket( AddressFamily.InterNetwork, SocketType.Strea., ProtocloType.Tcp);
server.Connect(服务端Socket绑定的IP终结点);
创建好连接之后,使用Socket对象的Send方法发送数据:
server.Send(Encoding.UTF8.GetBytes(Message));//数据必须以字节的原始形式发送
客户端发送的信息的编码方式,与服务端接收信息的解码方式,必须相一致!!!

小结:使用Socket的步骤
Server服务端
Socket.Socket
Socket.Bind
Socket.Listen
Socket.Accept
Socket.Read/Write
Socket.Shutdown
Socket.Close

Client客户端
Socket.Socket
Socket.Bind
Socket.Connect
Socket.Read/Write
Socket.Shutdown
Socket.Close

Socket连接队列
Socket的Listen方法的参数,指明了这个Socket对象请求队列中最多能接收的连接请求个数。
当队列已满的时候,计算机将不再理会新的连接请求。

0 0
原创粉丝点击