嵌入式操作系统实验指导书实验九无线网络通信实验[实验目的]1、掌握Socket编程方法;2、掌握WinCE无线网络的配置过程;3、了解TCP/IP协议4、熟悉EVC和VS.Net的开发环境;[实验仪器]1、装有PlatformBuilder、EVC和VS.Net开发平台的PC机一台2、XSBase270实验开发平台一套3、SL-2511CF无线网卡一块4、无线AP一套[实验原理]1、软件原理1.1服务器端操作socket(套接字)(1)在初始化阶段调用WSAStartup()此函数在应用程序中初始化WindowsSocketsDLL,只有此函数调用成功后,应用程序才可以再调用其他WindowsSocketsDLL中的API函数。(2)建立Socket初始化WinSock的动态连接库后,需要在服务器端建立一个监听的Socket,为此可以调用Socket()函数用来建立这个监听的Socket,并定义此Socket所使用的通信协议。此函数调用成功返回Socket对象,失败则返回INVALID_SOCKET(调用WSAGetLastError()可得知原因,所有WinSocket的函数都可以使用这个函数来获取失败的原因)。SOCKETPASCALFARsocket(intaf,inttype,intprotocol)参数:af:目前只提供PF_INET(AF_INET);type:Socket的类型(SOCK_STREAM、SOCK_DGRAM);protocol:通讯协定(如果使用者不指定则设为0);如果要建立的是遵从TCP/IP协议的socket,第二个参数type应为SOCK_STREAM,如为UDP(数据报)的socket,应为SOCK_DGRAM。(3)绑定端口接下来要为服务器端定义的这个监听的Socket指定一个地址及端口(Port),这样客嵌入式操作系统实验指导书户端才知道待会要连接哪一个地址的哪个端口,为此我们要调用bind()函数,该函数调用成功返回0,否则返回SOCKET_ERROR。intPASCALFARbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);参数:s:Socket对象名;name:Socket的地址值,这个地址必须是执行这个程式所在机器的IP地址;namelen:name的长度;如果使用者不在意地址或端口的值,那么可以设定地址为INADDR_ANY,及Port为0,WindowsSockets会自动将其设定适当之地址及Port(1024到5000之间的值)。此后可以调用getsockname()函数来获知其被设定的值。(4)监听当服务器端的Socket对象绑定完成之后,服务器端必须建立一个监听的队列来接收客户端的连接请求。listen()函数使服务器端的Socket进入监听状态,并设定可以建立的最大连接数(目前最大值限制为5,最小值为1)。该函数调用成功返回0,否则返回SOCKET_ERROR。intPASCALFARlisten(SOCKETs,intbacklog);参数:s:需要建立监听的Socket;backlog:最大连接个数;服务器端的Socket调用完listen()后,如果此时客户端调用connect()函数提出连接申请的话,Server端必须再调用accept()函数,这样服务器端和客户端才算正式完成通信程序的连接动作。(5)服务器端接受客户端的连接请求当Client提出连接请求时,Server端hwnd视窗会收到WinsockStack送来我们自定义的一个消息,这时,我们可以分析lParam,然后调用相关的函数来处理此事件。为了使服务器端接受客户端的连接请求,就要使用accept()函数,该函数新建一Socket与客户端的Socket相通,原先监听之Socket继续进入监听状态,等待他人的连接要求。该函数调用成功返回一个新产生的Socket对象,否则返回INVALID_SOCKET。SOCKETPASCALFARaccept(SCOKETs,structsockaddrFAR*addr,intFAR*addrlen);参数:s:Socket的识别码;addr:存放来连接的客户端的地址;addrlen:addr的长度(6)结束socket连接结束服务器和客户端的通信连接是很简单的,这一过程可以由服务器或客户机的任一端启动,只要调用closesocket()就可以了,而要关闭Server端监听状态的socket,同样也是利用此函数。另外,与程序启动时调用WSAStartup()憨数相对应,程式结束前,需要调用WSACleanup()来通知WinsockStack释放Socket所占用的资源。这两个函数都是调用成功返回0,否则返回SOCKET_ERROR。intPASCALFARclosesocket(SOCKETs);参数:s:Socket的识别码;intPASCALFARWSACleanup(void);参数:无嵌入式操作系统实验指导书1.2客户端Socket的操作(1)建立客户端的Socket客户端应用程序首先也是调用WSAStartup()函数来与Winsock的动态连接库建立关系,然后同样调用socket()来建...