基于TCP/IP的网络编程接口:socket
socket接口是TCP/IP传输层的应用编程接口(API),socket定义了许多函数和例程,程序员可用他们来开发基于TCP/IP的应用程序,如文传,聊天,网络监听等。
在UNIX中进程要对文件操作,一般要用open调用打开一个文件进行访问,每个进程都有一个文件描述符表,存放打开的文件描述符。用户使用open调用得到的文件
描述符实际上是文件描述符在该表中的索引号,该表项的内容是一个指向文件表的指针。应用程序仅使用该描述符就可以对指定文件进行操作。
socket接口增加了网络通信操作的抽象定义,与file操作一样,每个open的socket都对应一个整数,一般称为socket描述符。指向一个与该socket有关的数据结构。
端口
端口是网络中可用来命名和寻址的通信端口。是操作系统可分配的一种资源。
按OSI七层描述,传输层与网络层在功能上的最大区别是传输层提供进程通信能力,从该意义上讲,网络通信的最终地址就不仅仅是主机地址了,还可以包括描述进程的
某种标识符,为此TCP/IP协议提出了协议端口(protocol Port,简称端口)的概念,用于标识通信的进程。
端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。应用程序(即进程)通过系统调用与某端口建立连接并绑定后,传输层传给该端口的数据都被相应的进程
接收,相应的进程发给传输层的数据都通过该端口输出,在TCP/IP协议的实现中,端口操作类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用
一般的读写原语进行访问。
类似于文件描述符,每个端口都拥有一个叫端口号的整数型标识符,用于区别不同端口。每个端口都标识了一种服务。
端口号的分配是一个重要问题,两种基本分配方式:第一种叫全局分配,这是一种集中控制方式,由公认机制统一分配
第二种叫本地分配,又称动态连接,即进程需要访问传输层时,向本地操作系统提出申请,操作系统返回一个本地唯一的Port,进程再通过合适的系统调用将自己与该Port
联系起来
socket有三种类型:
流式套接口:(SOCK_STREAM)
又称流式套接字,提供了一个面向连接,可靠的数据传输服务,数据无差错,无重复地发送,且按序接收,内设流控,避免数据超限,数据被看作是数据流,无长度限制。
数据报式套接口:(SOCK_DGRAM)
又称数据报式套接字,数据报套接口定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错。
原始套接口:(SOCK_RAW)
又称原始套接字,该接口允许对较底层协议,如果IP,ICMP直接访问,常用于检验新的协议实现或访问现有服务中配置的新设备。
无连接服务器一般都是面向事务处理的,一个require一个respond就完成了client 程序与server端程序间的相互作用。
面向连接服务器处理的请求往往比较复杂,使用面向连接的套接口编程。面向连接的套接口工作过程如下:server首先启动,通过调用socket()建立一个套接口,然后调用
bind()将套接口和本地网络地址联系在一起,再调用listen()使套接口做好侦听的准备,并规定它的请求队列的长度,然后调用accpet()连接收连接。client端在建立套接口之后就
可以调用connect()和server之间建立连接,连接建立后,client和server就可以通过调用read()和write()来发送和接收数据,最后,待数据传送结束后,双方调用close()关闭套接口。
END !
本文出自 “百折不回” 博客,请务必保留此出处http://changbo.blog.51cto.com/1316452/1627008
原文地址:http://changbo.blog.51cto.com/1316452/1627008