嵌入式LinuxUDP通信程序设计


 

/*客户端程序UDPClient.c,使用方法UDPClientServerIPServerPort*/

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <errno.h>

#include <stdio.h>

#include <unistd.h>

#define MAX_BUF_SIZE    1024

 

void   udpc_requ(intsockfd,conststructsockaddr_in*addr,intlen)

{

char buffer[MAX_BUF_SIZE];

int n;

while(1)       

       {        /*从键盘读入,写到服务端*/

fgets(buffer,MAX_BUF_SIZE,stdin);

sendto(sockfd,buffer,strlen(buffer),0,addr,len);

bzero(buffer,MAX_BUF_SIZE);

                /*从网络上读,写到屏幕上*/

               n=recvfrom(sockfd,buffer,MAX_BUF_SIZE,0,NULL,NULL);

buffer[n]=0;

fputs(buffer,stdout);

       }

}

 

int main (int argc,char  **argv)

{

int sockfd,port;

struct  sockaddr_inaddr;

 

if(argc!=3)

       {

fprintf(stderr,"Usage:%s server_ipserver_port\n",argv[0]);

exit(1);

       }

 

if((port=atoi(argv[2]))<0)

       {

fprintf(stderr,"Usage:%sserver_ipserver_port\n",argv[0]);

exit(1);

       }

 

sockfd=socket(AF_INET,SOCK_DGRAM,0);

if(sockfd<0)

       {

fprintf(stderr,"Socket  Error:%s\n",strerror(errno));

exit(1);

       }      

       /*填充服务器端的资料*/

bzero(&addr,sizeof(structsockaddr_in));

addr.sin_family=AF_INET;

addr.sin_port=htons(port);

if(inet_aton(argv[1],&addr.sin_addr)<0)

       {

fprintf(stderr,"Ip error:%s\n",strerror(errno));

exit(1);

       }

udpc_requ(sockfd,&addr,sizeof(structsockaddr_in));

close(sockfd);

}

 

 

/*服务端程序UDPServer.c*/

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <stdio.h>

#include <errno.h>

#define SERVER_PORT     8888

#define MAX_MSG_SIZE    1024

 

void   udps_respon(intsockfd)

{

structsockaddr_inaddr;

int addrlen,n;

char msg[MAX_MSG_SIZE];

 

while(1)

       {       /*等待数据请求*/

               n=recvfrom(sockfd,msg,MAX_MSG_SIZE,0,

               (structsockaddr*)&addr,&addrlen);

msg[n]=0;

                /*显示服务器端已经收到了信息*/

fprintf(stdout,"I have received%s",msg);

                    /*数据回送*/

sendto(sockfd,msg,n,0,(structsockaddr*)&addr,addrlen);

     }

}

 

int main(void)

{

intsockfd;

struct sockaddr_inaddr;

 

sockfd=socket(AF_INET,SOCK_DGRAM,0);

if(sockfd<0)

       {

fprintf(stderr,"SocketError:%s\n",strerror(errno));

exit(1);

       }

bzero(&addr,sizeof(struct sockaddr_in));

addr.sin_family=AF_INET;

addr.sin_addr.s_addr=htonl(INADDR_ANY);

addr.sin_port=htons(SERVER_PORT);

if(bind(sockfd,(structsockaddr*)&ddr,sizeof(struct sockaddr_in))<0)

       {

fprintf(stderr,"BindError:%s\n",strerror(errno));

exit(1);

       }

udps_respon(sockfd);

close(sockfd);

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值