看了两天socket,东西比较多,简单总结下。
进程间通信方法有管道、信号量、共享内存、消息队列等,这些机制都依靠一台计算机系统的共享资源实现。资源可以是文件系统空间、共享的物理内存或者消息队列,只有运行在同一台机器上的进程才可以使用它们。socket也是进程间通信的一种方法,但是除上述通信以外,还包括了计算机网络通信。同一台机器上的进程之间可以使用套接字通信,不同机器之间也可以通过套接字实现进程通信,这样就支持分布在网络的客户/服务器系统。
1.什么是套接字
套接字是一种通信机制,客户/服务器系统开发工作既可以在本地单机上进行,也可以跨网络进行。linux所提供的打印服务、连接数据库、远程登录和用于文件传输的ftp通常都是通过socket来进行通信。
套接字与管道的区别是套接字明确的将客户与服务器区分开来,可以将多个客户连接到一个服务器上。
套接字主要应用于网络通信,网络的层次也是我们需要了解的。
网络层次从底层到上层分为媒介---->数据链路层---->网络层---->传输层---->应用层。
数据链路层提供硬件接口,网络层包括IP协议,传输层包括TCP/UDP协议,应用层即用户进程应用程序。而socket位于应用层与传输层之间,可以看做一个抽象的层次,一组接口。应用程序通过socket将数据送到传输层,而不用管具体的TCP/IP协议。
2.套接字的连接
套接字连接位于客户端和服务器端。服务器端服务器进程要用socket()系统调用创建一个套接字(服务器套接字),该套接字不可与其他进程共享。然后服务器需要初始化套接字,与端口绑定(bind)、对端口进行监听(listen)、调用accept(进行阻塞)、等待客户连接。这时如果客户端有初始