workstation.cpp
#include
#include
#include
#include
using namespace std;
#pragma comment(lib,“ws2_32.lib”)
int main(){
SOCKET sock_Client; //客户端用于通信的Socket
WSADATA WSAData;
char receBuf[BUFFER_SIZE]; //发送数据的缓冲区
char sendBuf[BUFFER_SIZE]; //接受数据的缓冲区
if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0){
printf("初始化失败!");
return -1;
} //初始化
sock_Client=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);//创建客户端用于通信的Socket
SOCKADDR_IN addr_server; //服务器的地址数据结构
addr_server.sin_family=AF_INET;
addr_server.sin_port=htons(4567);//端口号为4567
addr_server.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); //127.0.0.1为本电脑IP地址
SOCKADDR_IN sock;
int len=sizeof(sock);
while(true){
cout<<"请输入要执行的命令:";
cin>>sendBuf;
sendto(sock_Client,sendBuf,strlen(sendBuf),0,(SOCKADDR*)&addr_server,sizeof(SOCKADDR));
//int last=recv(sock_Client, receBuf, strlen(receBuf), 0); // (调用recv和recvfrom都可以)
int last=recvfrom(sock_Client,receBuf,strlen(receBuf),0,(SOCKADDR*)&sock,&len);
if(last>0){
receBuf[last]='\0'; //给字符数组加一个'\0',表示结束。不然输出有乱码
if(strcmp(receBuf,"end")==0){
cout<<"终止通信"<
return 0;
}
sensor.cpp
#include
#include
#include
#include
using namespace std;
#pragma comment(lib,“ws2_32.lib”)
#define BUFFER_SIZE 1024
int main(){
WSADATA WSAData;
char receBuf[BUFFER_SIZE];
char Response[]="";
if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0){
printf(“初始化失败”);
exit(1);
}
SOCKET sockServer=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
if(sockServer == INVALID_SOCKET)
{
printf(“Failed socket() \n”);
return 0;
}
SOCKADDR_IN addr_Server; //服务器的地址等信息
addr_Server.sin_family=AF_INET;
addr_Server.sin_port=htons(4567);
addr_Server.sin_addr.S_un.S_addr=INADDR_ANY;
if(bind(sockServer,(SOCKADDR*)&addr_Server,sizeof(addr_Server))==SOCKET_ERROR ){//服务器与本地地址绑定
printf(“Failed socket() %d \n”, WSAGetLastError());
return 0;
}
SOCKADDR_IN addr_Clt;
int fromlen = sizeof(SOCKADDR);
while(true){
int last= recvfrom(sockServer, receBuf, 1024, 0, (SOCKADDR*) &addr_Clt, &fromlen);
if(last>0){ //判断接收到的数据是否为空
receBuf[last]='\0';//给字符数组加一个'\0',表示结束。不然输出有乱码
if(strcmp(receBuf,"end")==0){
cout<<"终止通信"<>Response; //给客户端回复消息
sendto(sockServer,Response, strlen(Response), 0, (SOCKADDR*)&addr_Clt, sizeof(SOCKADDR));
}
closesocket(sockServer);
WSACleanup();
system("pause");
return 0;
}