addrSrv.sin_port = htons ( 6000) ;//指定端口号
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
(4)监听。将套接字设为监听模式,准备接收客户请求。调用Listen函数用于设置套接字的等待连接状态。
listen( sockSvr,3);
(5)等待客户请求到来。进入监听状态后,通过调用Accept函数使套接字做好接受客户连接的准备。
SOCKADDR IN addrClient;//定义地址族
int len=sizeof(SOCKADDR);
SOCKET sockConn=accept (soekSrv,(SOCKADDR*)&addrClient,&len);
(6)用返回的套接字和客户端进行通信。调用Send函数用于发送数据,调用Recv函数用于接收数据。
char sendBuf[100];//定义发送数据缓冲区
send ( sockConn , sendBuf, strlen (sendBuf )+1,0);
char recvBuf[100] ;//定义接收数据缓冲区
recv( sockConn , recvBuf ,100 ,0 );
(7)关闭套接字。通信结束,必须关掉连接以释放套接字占用的资源,等待另一客户请求。调用Closesacket函数用于关闭套接字。
closesocket(sockConn);
4. 2. 2客户端程序设计
(1)加载套接字库,与服务器端方法相同。
(2)创建套接字(Socket)。
SOCKET sockClient=socket(AF_INET, SOCK_STBEAM,O );
(3)绑定,同样与服务器端是相同的。
(4)向服务器发出连接请求。
connect(sockClient,(SOCKADDR*)&addrSrv, si-zeof(SOCKADDR));
(5)和服务器端进行通信,还是调用Send函数和Recv函数。
char recvBuf [ 100 ];
recv ( sockClient, recvBuf,100 ,0 );
printf(”%s \ n"' , recvBuf );
float x+;
send( sockClient,”x+”,strlen”x+”)+1,0);
(6)关闭套接字,调用Closesocket函数。
closesocket (soekClient);
在应用程序关闭套接字连接后,还需要调用WSACleanup函数终止对Winsock库的使用,并释放资源。
WSACleanup();
5 结束语
随着实时以太网的快速发展,工业自动化正越来越多地用到它,数控系统走向网络化、智能化已成为必然。基于实时以太网、TCP协议和Socket编程技术的数控系统组网与远程监控系统可以有效实现多台数控系统与一台服务器的联网及服务器对它们的远程监控,可以大大提高车间资源的有效利用和生产效率,具有较高的实用价值。