Socket进程通信机制

1、Socket通常称为“套接字”,用于描述IP地址和端口,是一个通信链的句柄。

2、应用程序通过套接字向网络发出请求或者应答网络请求。

3、Socket既不是一个程序,也不是一种协议,其只是操作系统提供的通信层的一组抽象API。

4、进程通信的相关概念:

  网间进程通信要解决的是不同主机进程间相互通信问题。为此,首先要解决的是网间进程标识问题。同一主机上,不同进程可用唯一进程号(Process ID)标识。

  (1)端口:网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源,用于标识通信的进程

    传输层和网络层在功能上功能上的最大区别是传输层提供进程通信能力。

    端口是一种抽象的软件结构。应用程序(即进程)通过系统调用与某端口建立连接(binding)后,传输层传给该端口的数据都被相应的进程所接收,相应的进程发给传输层的数据都通过该端口输出。

    

  

      类似于文件描述符,每一个端口都拥有一个端口号,都是整数型标识符,用于区别不同端口。

      TCP/UDP段结构中端口的地址都是16比特,有0~65535个端口号。

      常见的端口号有,FTP(22)、HTTP(80)、SMTP(25)等。

  (2)地址:

      网络通信中通信的两个进程分别处在不同的机器上,应遵循以下原则:

        某台主机可以与多个网络相连,必须指定一个特定的网络地址;

        网络上每台主机应有唯一的地址;

        每台主机的每个进程应有在该主机上的唯一标识符

  (3)连接:

      两个进程间的通信链路称为连接。连接表现为一些缓冲区和一组协议机制。

5、Socket是一种服务,与其实现的语言无关。基于这个性质,我们能实现不同服务之间,不同语言之间的互联互通。

6、注意一个小知识点:本地进程间通过TCP通信,使用Fiddler等抓包工具是抓不到数据的。主要是因为回环接口的机制,这些包不会到达网卡,数据包直接被返回到传输层的输入队列中去了。

7、Socket函数原型:

  SOCKET socket(int af, int type, int protocol);

    af:指定应用程序使用的通信协议的协议族,对于TCP/IP协议族该参数设置为AN_INET,对于UNIX可建立本地Socket

    type:指定创建socket类型:

        流套接字类型(SOCK_STREAM):最常见的类型,基于TCP协议

        数据报套接字类型(SOCK_DGRAM):即UDP数据报

        原始套接字类型(SOCK_RAW):在IP层对套接字进行编程

    protocol:指定应用程序所使用的通信协议。最常用的是TCP和UDP

  流套接字和数据报套接字不能完成的任务,可以在原始套接字中得以实现。

8、Socket从传输模式上又分为端对端和点对点的连接,流套接字和数据报套接字都属于端对端的连接,因此需要绑定端口号。而原始套接字是基于IP协议的,属于点对点的传输模式,是没有端口这个概念的。比如常用的监测网络连接ping命令,就是基于ICMP协议的,它不存在端口的概念。

9、PHP中的Socket函数:

  (1)socket_create(int $domain, int $type, int $proticol):创建一个socket

    第一个参数指定socket创建时所使用的通信协议族  AF_INET(基于IPv4)、AF_INET6(基于IPv6)、AF_UNIX(UNIX本地通信协议)

    第二个参数指定socket通信的交互类型,SOCK_STREAM(可靠的全双工链接,支持TCP)、SOCK_DGRAM(自动寻址信息功能,支持UDP)等

    第三个参数指定搜才可以使用何种类型处理协议,包括ICMP、UDP、TCP

  (2)socket_bind(resource $socket, string $address[, int $port = 0]):将IP地址和端口绑定到socket_create()所创建的句柄

    第一个参数是必选参数,其值是socket_create()创建的句柄

    第二个参数是必选参数,其值是要绑定的IP地址

    第三个参数是可选参数,其值是要绑定的端口号

  (3)socket_listen($socket[, $backlog = 0]):用于监听客户端数据

    第一个参数是socket句柄

    第二个参数的允许的最大连接数

  (4)socket_set_block($socket):设置为非阻塞模式

  (5)socket_write($socket, $buffer[, $length=0]):使用此函数想socket写入数据

  (6)socket_read($socket, $length[, $type = PHP_BINARY_READ]):读取指定长度的数据

  (7)fsockopen($hostname, [$port = -1 [, $errno [, $errstr [$timeout = ini_get["default_socket_timeout"] ]]]) :实现长连接

  (8)socket_set_option($socket, $level, $optname, $optval):设置socket的控制选项

  (9)socket_last_error([$socket]):返回操作中任何socket产生的最后错误,返回值是一个int型的错误代号

时间: 01-22

Socket进程通信机制的相关文章

Qt的内部进程通信机制 [转]

Qt 作为一种跨平台的基于 C++ 的 GUI系统,能够提供给用户构造图形用户界面的强大功能.自从 1996 年 Qt 被 Trolltech公司发布以来,该系统成为世界上很多成功的图形用户应用所使用的主要系统.更为重要的是,Linux 操作系统的桌面环境系统 KDE 也是基于 Qt构造的.目前,Qt 已经提供了对包括 MS/Windows.Unix/X11 和嵌入式平台的支持,得到了越来越广泛的应用. 在 Qt 系统中,不仅有着构造完善的系统结构,而且为了满足用户对编写图形用户界面应用的种种需

Android 进程通信机制之 AIDL

什么是 AIDL AIDL 全称 Android Interface Definition Language,即 安卓接口描述语言.听起来很深奥,其实它的本质就是生成进程间通信接口的辅助工具.它的存在形式是一种 .aidl 文件,开发者需要做的就是在该文件中定义进程间通信的接口,编译的时候 IDE 就会根据我们的 .aidl 接口文件生成可供项目使用的 .java 文件,这和我们说的"语法糖"有些类似. AIDL 的语法就是 java 的语法,就是导包上有点细微差别.java 中如果两

linux高级编程之socket进程通信

Socket套接字不仅可以用于网络通信和局域网通信还可以用于本地的进程通信. 创建套接字时使用本地协议PF_UNIX,套接字分为流失套接字,数据报套接字. Socket本地进程通信较其他的进程间通信方式(管道,system Ⅴ,BSD)使用更加方便.效率. 本地地址结构: Struct  sockaddr_un   //<sys/un.h> { Sa_family_t sun_family; Char sun_path[108]; //套接字的文件路径 } 填充地址结构: 1.定义:struc

Socket的通信机制?

套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元.它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口. 应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据.为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了

Linux进程通信——管道

进程间通信(IPC:Inner Proceeding Communication) 进程是操作系统实现程序独占系统运行的假象的方法,是对处理器.主存.I/O设备的抽象表示.每个进程都是一个独立的资源管理单元,每个进程所看到的是自己独占使用系统的假象,因此各个进程之间是不能够直接的访问对方进程的资源的,不同的进程之间进行信息交互需要借助操作系统提供的特殊的进程通信机制. 进程之间的通信,从物理上分,可以分为同主机的进程之间的通信和不同主机间的进程之间的通信.从通信内容方式上分,可以分为数据交互.同

linux各种IPC机制(进程通信)

linux各种IPC机制 (2011-07-08 16:58:35)     原文地址:linux各种IPC机制(转)作者:jianpengliu 原帖发表在IBM的developerworks网站上,是一个系列的文章,作者郑彦兴,通过讲解和例子演示了Linux中几种IPC的使用方式,我觉得很好,在这里做一个保留,能看完的话Linux IPC的基础是没有问题的了.一)Linux环境进程间通信(一)管道及有名管道http://www.ibm.com/developerworks/cn/linux/

php socket通信机制实例说明与代码

php socket通信机制实例说明与代码----什么是socket 所谓socket一般也称作"套接字",用于描述ip地址和端口,是一个通讯链的句柄.使用程序一般经过"套接字"向network发出请求也许应对network请求.说白了就是一种通讯机制.它类似于银行,电信啊这一些部分的电话客服业务单元.您打电话的时候,那边会调设置一个人回答您的问题,客服业务单元就相当于socket的服务器端了,您这边呢就相当于用户端了,在和您通话完结前,假设有人在想找和您通话的那个

从AIDL开始谈Android进程间Binder通信机制

本文首先概述了Android的进程间通信的Binder机制,然后结合一个AIDL的例子,对Binder机制进行了解析. 概述 我们知道,在Android app中的众多activity,service等组件可以运行在同一进程中,也可以运行在不同进程中.当组件运行在同一进程中进行通信就显得比较简单,在之前的Android线程间通信机制中已经讲过了:而当它们运行在不同的进程中时,就需要使用我们本文中所要介绍的Binder机制了. Binder作为一种进程间通信机制,负责提供远程调用的功能(RPC),

AF_UNIX域通信(基于socket和pipe的通信,只适于UNIX系统S&C同在一个主机上,用于进程通信)

服务器端: #include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include <sys/socket.h>#include <sys/un.h>#include <stddef.h>char buf[100];void main