套接字(socket)是网络计算机与应用程序之间发送和接收数据的方式的一种抽象描述它描述了(可能在不同的计算机上也可能在同一台计算机内的)两个通信点之间的连接 在实际操作中套接字编程往往与TCP/IP和UDP/IP通信相结合(关于TCP/IP和UDP/IP的更多信息参见下面的理解IPTCP和UDP)论及套接字编程时以下类信息是很重要的 ● 协议(如TCP/IP或UDP/IP) ● IP地址(例如) ● 端口号(例如端口) 举例来说对于这样的地址你应该比较熟悉这个地址用来指示Web浏览器加载位于的主页http指定了使用的应用协议(HTTP使用TCP/IP传输数据)指定了地址(名称将会被DNS服务器解析成一个IP地址)由于HTTP使用端口进行通信端口号被隐式地指明故没有出现在地址里如图所示通信的双方都必须拥有IP地址 HTTP(TCPIP) () 端口 HTTP(TCPIP)
端口 尽管有TCP/IP这样的协议负责把数据从一个点传输到另一个点但所传输数据的内容则需由诸如HTTP这样的应用协议来指定 在NET Framework里套接字通信由Socket类来实现(该类位于SystemNetSockets命名空间) 理解IPTCP和UDP 对于网络编程来说深入地理解当下正在使用的一些常见网络协议是很重要的首先是网际协议(Internet ProtocolIP)IP指定了从一个点传送到另一个点的数据分组(如数据报datagrams)的格式和寻址方案假设IP是一种邮递系统你可以通过它把邮件从一个地方寄到另一个地方你只需写上收件者地址并把邮件丢进邮箱里随后邮局会试图把邮件投递给收件人但是你不能确定你的邮件肯定会到达目的地也不会知道它究竟何时到达 为了确保邮件被正确地投递你必须使用额外的服务比如挂号信与上述情形类似我们需要将其他协议与IP联合使用以保证数据分组传送无误传输控制协议(Transmission Control ProtocolTCP)正是这样一种协议TCP是一种面向连接的网络协议它(通过应答机制)保证数据分组可靠并有序地传送作为流行的网络协议与IP协同工作的TCP已被Web浏览器和电子邮件客户这样的应用程序广泛采用 TCP确保了传送的正确性但它也有不便的地方正如要花更多的钱来寄送的挂号信一样TCP给被发送的数据分组加上了额外的报头增大了分组的尺寸因此开发人员有时会将用户数据报协议(User Datagram ProtocolUDP)与IP联用UDP是一种无连接的网络协议同样把数据分组从一点发送到另一个点只有一个例外——它并不提供可靠的有保障的传送由于UDP不对传送提供保障数据分组将包含更多的有效信息并能更快地传送使用UDP的开发人员必须建立自己的逻辑以确保数据分组的正确传送这也与邮寄的例子很相似你可以自己给收件人打电话看他们是否已经收到你寄的邮件如果他们没有收到你可能需要重新寄对于那些传送小数据分组且不需要数据精确组装的应用程序来说UDP是非常有用的这类程序包括简单文件传输协议(Trivial File Transfer ProtocolTFTP)域名系统(Domain Name SystemDNS)以及语音IP(Voice over IPVoIP) |