计算机应用 | 古代文学 | 市场营销 | 生命科学 | 交通物流 | 财务管理 | 历史学 | 毕业 | 哲学 | 政治 | 财税 | 经济 | 金融 | 审计 | 法学 | 护理学 | 国际经济与贸易
计算机软件 | 新闻传播 | 电子商务 | 土木工程 | 临床医学 | 旅游管理 | 建筑学 | 文学 | 化学 | 数学 | 物理 | 地理 | 理工 | 生命 | 文化 | 企业管理 | 电子信息工程
计算机网络 | 语言文学 | 信息安全 | 工程力学 | 工商管理 | 经济管理 | 计算机 | 机电 | 材料 | 医学 | 药学 | 会计 | 硕士 | 法律 | MBA
现当代文学 | 英美文学 | 通讯工程 | 网络工程 | 行政管理 | 公共管理 | 自动化 | 艺术 | 音乐 | 舞蹈 | 美术 | 本科 | 教育 | 英语 |

C语言实的串行通信接口程序(1)(2)

2014-07-25 01:15
导读:(4)出错处理 为了和以后的多线索环境(如windows nt)兼容,winsock提供了两个出错处理函数wsagetlasterror()和wsasetlasterror()来获取和设置本线索的最近错误号。 (5)启

(4)出错处理
为了和以后的多线索环境(如windows nt)兼容,winsock提供了两个出错处理函数wsagetlasterror()和wsasetlasterror()来获取和设置本线索的最近错误号。
(5)启动与终止
winsock的应用程序在使用上述winsock函数前,必须先调用wsastartup()函数对windows sockets dll进行初始化,以协商winsock的版本支持,并分配必要的资源。在应用程序退出之前,应该先调用函数wsacleanup()终止对windows sockets dll的使用,并释放资源,以利下一次使用。
在这些函数中,实现windows网络实时通信的关键是异步选择函数wsaasyncselect()的使用,其原型如下:int pascal far wsaasyncselect(socket s,hwnd hwnd, unsigned intwmsg, long levent);它请求windows sockets dll在检测到在套接字s上发生的levent事件时,向窗口hwnd发送一个消息wmsg。它自动地设置套接字s处于非阻塞工作方式。参数levent由表2所列事件的一个或多个组成。
@@t8s10702.gif;表2 异步选择网络事件@@
例如,我们要在套接字s读准备好或写准备好时接到通知,可以使用下面的语句:
rc=wsaasyncselect(s,hwnd,wmsg,fd-read | fd-write);
当套接字s上被提名的一个网络事件发生时,窗口hwnd将收到消息wmsg,变量lparam的低字指示网络发生的事件,高字指示错误码。应用程序就可以通过这些信息来决定自己的下一步动作。
三、网络实时通信的实现
我们来设计一个简单的基于连接的点对点网络实时通信程序。服务器首先启动,它建立套接字之后等待客户机的连接;客户机在启动后,建立套接字,然后和服务器建立连接;连接建立后,客户机通过连接给服务器发送一段数据,服务器接收后又将它发送回来,客户机再发送,如此循环,直至用户命令客户机退出或网络出错;客户机关闭连接和套接字后退出,服务器在检测到连接关闭后,关闭套接字自动结束。
我们的实例是unix下基于bsd socket的服务器程序和windows下基于winsock的客户机程序之间的通信。服务器在主机unix下直接运行,前台和后台均可;客户机在windows下运行,带一个参数,即主机的名字。如win client rs6000,rs6000是在hosts文件中已定义好的主机名。

(转载自科教范文网http://fw.nseac.com)


我们先看客户机程序,首先定义几个宏、菜单资源和部分全局变量。
程序1:部分windows程序源代码(宏、菜单和变量)
#define userport 3333/*用户定义端口号*/
#define idm-start101/*“启动”菜单项标志*/
#define idm-exit102/*“退出”菜单项标志*/
#define um-sockwm-user 0x100/*用户定义网络消息*/
clientmenu menu/*客户机菜单*/
begin
popup "
上一篇:IEC61131-3工控编程语言国际标准及其应用(1) 下一篇:没有了