博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向连接的通信(LINUX)
阅读量:4094 次
发布时间:2019-05-25

本文共 1894 字,大约阅读时间需要 6 分钟。

首先介绍几个缩写,UICI(Universal Ineternet Communication Interface)叫做通用因特网通信接口,它其实是面向连接通信的一个简化的API( Application Programming Interface)应用程序接口。

UICI接口是通过流套接字和TCP实现的。
下来介绍常用的一种通信模型,客户机-服务器。
它们通信的方式是:由客户机发起请求,服务器会等待并接收来自客户机的请求,一旦客户机和服务器之间的通信信道连接起来,则它们会利用通信端点来访问这个通信信道,即使用句柄(文件描述符)来通信。
其中的端点分为通信端点和被动通信端点。被动或监听端点能够对客户机发出的连接请求进行排队,并且还有建立客户机连接所需的资源。
建立信道是一个细活,你需要知道服务器的位置,并且还要显式的命名要访问的特定的服务器。所以使用主机地址(IP地址)和一个被称作端口号的整数合并成一个套接字(英文叫Socket)来指定一个服务。
通信连接起来之后,服务器会对接收到的请求开始处理,所以了解一下面向连接的服务器策略。
串行服务器策略,它必须在完全处理完一个请求之后才能接收其他请求。

伪代码:    for(;;){    wait for a client request on the listening file descriptor;     create a private two-way communication channel to the client;     while(no error on th private communication channel){    read from the client;    }    process the request;    respond to the client;    close the file descriptor for the private communication channel;    }

父服务器策略,创建出一个子进程来处理与客户机的实际业务,同时让服务器去坚挺其他的请求。

伪代码:    for(;;){    wait for a client request on the listening file descriptor;     create a private two-way communication channel to the client;     fork a child to handle the client;    close file descriptor for the private communication channel;    claen up zombie children;    }

线程化服务器,服务器在它自己的进程空间创建一个线程来处理客户机请求,但是,它有一个缺点:由于共享地址空间,在不同请求之间会产生干扰。

伪代码:    for(;;){    wait for a client request on the listening file descriptor;    create a private two-way communication channel to the client;    create a detached thread to handle the client;    }

了解了客户机-服务器的通信方式之后,下来详细的学习UICI,这玩意是把一些建立通信时必须的操作整合到一个头文件中,并不是UNIX标准中的一部分。它实现的步骤,即编程的流程如下:

UICI服务器:
1、打开一个致命的监听端口(u_open)。u_open函数返回一个监听文件描述符。
2、在坚挺文件描述符上等待连接请求(u_accept)。u_accept函数一直阻塞,直到有客户机请求连接位置,然后它返回一个通信文件描述符,并将这个文件描述符用作私有双攻客户机-服务器通信的句柄。
3、通过通信文件描述符(read和write)与客户机通信。
4、关闭通信文件描述符(close)。
UCUI客户机:
1、连接到一个指定的主机和端口(u_connect)。连接请求返回与服务器进行双攻通信时使用的通信文件描述符。
2、通过通信文件描述符(read和write)与服务器通信。
3、关闭通信文件描述符(close)。
以上是面向连接通信的初步认识,下来会补全UICI这个头文件。

转载地址:http://epxii.baihongyu.com/

你可能感兴趣的文章
使用Hibernate步骤:(一)
查看>>
正则,剔除非数字.保留两位小数
查看>>
js返回上一页并刷新的几种方法:
查看>>
使用Hibernate :三种状态 (二)
查看>>
Java日期转换
查看>>
做个简单的分页导航
查看>>
配置 struts.xml (一)
查看>>
配置 struts.xml (二)
查看>>
Struts2中获得Servlet API对象
查看>>
GeneratedByMyEclipseHibernateTools工具配置hibernate
查看>>
关于BaseDao使用泛型时出错
查看>>
关于BaseDaoImpl的简单示例
查看>>
list 类型转换
查看>>
SSM 整合 以及 Ehcache 步骤
查看>>
FileFilter实现,文件过滤
查看>>
判断字符类型(字母数字等)的简单方法
查看>>
sql函数
查看>>
转-shiro基础学习(四)—shiro与项目整合
查看>>
(转)SpringMVC+Shiro权限管理
查看>>
SpringMVC配置异常
查看>>