soket编程
Posted 岁月静好--lyr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了soket编程相关的知识,希望对你有一定的参考价值。
一。为什么要使用soket编程
进程之间通信的前提是需要能够唯一的标识一个进程。在本地通信可以使用PID唯一的标识一个进程。在网络中两个进程的冲突几率很大。
不过,网络层的ip地址可以唯一的标识一台主机,传输层的协议和端口号可以唯一的标识一台主机上的一个进程。
因此,ip地址+协议+端口号 就可以唯一的标识网络中的一个进程了。
唯一的标识一个进程之后,就可以利用soket通信了,soket被翻译成套接字,是应用层和传输层之间的一个抽象层。把一些TCP/IP的复杂的操作抽象为接口来实现网络中的通信。
二。soket的通信流程
socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现。客户端和服务器端各自维护一个“”文件“。
建立连接之后,可以读取对方的内容或者向自己的文件中写入内容供对方读取。
具体流程如下:
1.socket():根据IP地址的类型(ipv6或者iPv4),socket的类型,传输层的协议类型(TCP or UDP等)创建socket,但值得注意的是,此时该socket并没有一个具体的地址。
2.bind():给刚才已经创建好的socket赋值一个众所周知的具体的地址,(ip地址+端口号)。
注意:客户端和服务器端不同的是,服务器端是需要提前指定一个具体的地址的,而客户端就不会指定,是在connect()的时候自动由系统随机生成的一个。
3.listen():在创建完socket(),bind()之后,就会调用listen()监听这个端口,如果客户端这时调用connect()发出连接请求,服务器端就会接收到这个请求。
4。服务器监听到这个请求之后,就会调用accept()函数取接收请求,这样连接就建立好了。之后就可以开始网络I/O操作了,即类同于普通文件的读写I/O操作。
5。在服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应的socket描述字,好比操作完打开的文件要调用fclose关闭打开的文件。
以上是关于soket编程的主要内容,如果未能解决你的问题,请参考以下文章