嵌入式系统大项目——UDP通信的框架

workstation.cpp
#include<winsock2.h>
#include<stdio.h>
#include<string.h>
#include
using namespace std;
#pragma comment(lib,“ws2_32.lib”)

define BUFFER_SIZE 1024 //缓冲区大小

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<<"终止通信"<<endl;//当服务器发来end时,关闭socket
                   closesocket(sock_Client);
                    break;
            }else{
          printf("接收到数据:%s\n", receBuf);
            }

   }

}
closesocket(sock_Client);
WSACleanup();

system("pause");

return 0;
}

sensor.cpp
#include<winsock2.h>
#include<stdio.h>
#include<string.h>
#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<<"终止通信"<<endl;      
              closesocket(sockServer);  
			  return 0;}
       else if(strcmp(receBuf,"init")==0)
	   {printf("接收到命令(%s):%s\n", inet_ntoa(addr_Clt.sin_addr), receBuf);
       }
	   else if(strcmp(receBuf,"datacollect")==0)
	   {printf("接收到命令(%s):%s\n", inet_ntoa(addr_Clt.sin_addr), receBuf);
       }
	   else if(strcmp(receBuf,"read")==0)
	   {printf("接收到命令(%s):%s\n", inet_ntoa(addr_Clt.sin_addr), receBuf);
	   }
	   else if(strcmp(receBuf,"write")==0)
	   {printf("接收到命令(%s):%s\n", inet_ntoa(addr_Clt.sin_addr), receBuf);
	   }
	}
      cout<<"回复客户端消息:";
      cin>>Response; //给客户端回复消息
      sendto(sockServer,Response, strlen(Response), 0, (SOCKADDR*)&addr_Clt, sizeof(SOCKADDR));  
}  

closesocket(sockServer);  

WSACleanup();
system("pause");
 return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值