Socket介绍
2015-10-25 14:49
295 查看
1.什么是Socket?
网络中的进程是通过socket来通信的,那什么是socket呢?socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –>读写write/read –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。
2.Socket基本接口函数
2.1 socket()函数
socket函数对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字,而socket()用于创建一个socket描述符(socketdescriptor),它唯一标识一个socket。这个socket描述字跟文件描述字一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。
2.2 bind函数
当我们调用socket创建一个socket时,返回的socket描述字它存在于协议族(addressfamily,AF_XXX)空间中,但没有一个具体的地址。如果想要给它赋值一个地址,就必须调用bind()函数,否则就当调用connect()、listen()时系统会自动随机分配一个端口。因此bind()函数的作用就是把一个地址族中的特定地址赋给socket。
通常服务器在启动的时候都会绑定一个众所周知的地址(如ip地址+端口号),用于提供服务,客户就可以通过它来接连服务器;而客户端就不用指定,有系统自动分配一个端口号和自身的ip地址组合。这就是为什么通常服务器端在listen之前会调用bind(),而客户端就不会调用,而是在connect()时由系统随机生成一个。
2.3 listen()、connect()函数
如果作为一个服务器,在调用socket()、bind()之后就会调用listen()来监听这个socket,如果客户端这时调用connect()发出连接请求,服务器端就会接收到这个请求。2.4 accept()函数
TCP服务器端依次调用socket()、bind()、listen()之后,就会监听指定的socket地址了。TCP客户端依次调用socket()、connect()之后就想TCP服务器发送了一个连接请求。TCP服务器监听到这个请求之后,就会调用accept()函数取接收请求,这样连接就建立好了。之后就可以开始网络I/O操作了,即类同于普通文件的读写I/O操作。2.5
read()、write()等函数
万事具备只欠东风,至此服务器与客户已经建立好连接了。可以调用网络I/O进行读写操作了,即实现了网咯中不同进程之间的通信!2.6 close()函数
在服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应的socket描述字,好比操作完打开的文件要调用fclose关闭打开的文件。相关文章推荐
- iOS:自定义工具栏、导航栏、标签栏
- 在SrollView中嵌套GridView遇到的问题及解决办法
- HTTP协议与cookie技术:——一个周日下午
- 程序员怎样快速赚到一百万?
- neural network and deep learing(笔记一)
- php树状
- 二叉排序树查找
- RHEL6.7下,安装vnc远程桌面。
- 设计模式-模板模式
- 51nod 1067 Bash游戏 V2 (博弈论_找规律)
- LeetCode OJ:Count Complete Tree Nodes(完全二叉树的节点数目)
- 常用的oracle数据字典
- Windows下Memcache的安装及PHP扩展配置方法
- PHP读写XLS
- 音乐播放器-MainFragment分析3
- 链式有序表的合并
- 解释:ListView适配Button、CheckBox时OnItemClickListener无响应
- hdu2568 前进
- rabbit常用三种exchange类型和python接入脚本
- mysql数据库的导入导出