码迷,mamicode.com
首页 > 其他好文 > 详细

socket

时间:2015-03-31 20:18:59      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:socket   linux   

基于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

socket

标签:socket   linux   

原文地址:http://changbo.blog.51cto.com/1316452/1627008

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!