Chinaunix首页 | 论坛 | 博客
  • 博客访问: 105045
  • 博文数量: 50
  • 博客积分: 3120
  • 博客等级: 中校
  • 技术积分: 800
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-25 16:40
文章存档

2011年(1)

2009年(9)

2008年(40)

我的朋友

分类: LINUX

2008-09-25 17:15:27

以太网测试
先测试一下简单点的UDP通讯,做一个SERVER和一个CLIENT两个程序,SERVER程序在启动后会建立并绑定SOCKET,等待接收来自CLIENT的数据.CLIENT启动后会在建立SOCKET后,打开一个文本文件,并将读到的内容发到SERVER端。最后发送字符串STOP结束,终止SERVER和CLIENT之间的连接。
* udp_client.c*/
#include
#include
#include
#include
#include
#include
#include
int port = 8000;
int main()
{
   int   sockfd;
   int   i=0;
   int   z;
   char buf[80],strl[80];
   struct sockaddr_in   adr_srvr;
   FILE *fp;
  
   /*打开product.txt文本文件*/
   printf("打开文件...\n");
   fp = fopen("product.txt","r");
   if (fp == NULL)
   {
     perror("open file");
     exit(1);
   }
  
   /*建立server ipv4 地址*/
   printf("连接Server..\n");
   bzero(&adr_srvr,sizeof(adr_srvr));
   adr_srvr.sin_family = AF_INET;
   adr_srvr.sin_addr.s_addr = inet_addr("192.168.1.196");
   adr_srvr.sin_port = htons(port);
  
   /*建立Socket*/
   sockfd = socket(AF_INET, SOCK_DGRAM, 0);
   if (sockfd == -1 )
   {
     perror("socket error");
     exit(1);
   }
  
   /*连续读取product.txt 中的3笔数据给server*/
   printf("传送文件内容...");
   for(i=0;i<3;i++)
   {
     fgets(strl,80,fp);
     printf("第 %d 笔: %s\n",i,strl);
     sprintf(buf,"第 %d 笔: %s\n",i,strl);
     z = sendto(sockfd, buf, sizeof(buf), 0,
         (struct sockaddr *)&adr_srvr, sizeof(adr_srvr));
     if( z < 0)
     {
       perror("sendto error");
       exit(1);
     }
   }
  
   /*传送stop给server*/
   printf("传送结束字符串...");
   sprintf(buf,"stop\n");
     z = sendto(sockfd, buf, sizeof(buf), 0,
         (struct sockaddr *)&adr_srvr, sizeof(adr_srvr));
     if( z < 0)
     {
       perror("sendto error");
       exit(1);
     }
   
   fclose(fp);
   close(sockfd);
   printf("信息传送结束.\n");
   exit(0);
}
/* udp_server.c*/
#include
#include
#include
#include
#include
#include
#include
int port = 8000;
int main()
{
   int   sockfd;
   int   len;
   int   z;
   char buf[256];
   struct sockaddr_in   adr_inet;
   struct sockaddr_in   adr_clnt;
  
   printf("等待Clint 端传输...\n");
  
   /*建立server ipv4 地址*/
   bzero(&adr_inet,sizeof(adr_inet));
   adr_inet.sin_family = AF_INET;
   adr_inet.sin_addr.s_addr = inet_addr("192.168.1.196");
   adr_inet.sin_port = htons(port);
  
   len = sizeof(adr_clnt);
  
   /*建立Socket*/
   sockfd = socket(AF_INET, SOCK_DGRAM, 0);
   if (sockfd == -1 )
   {
     perror("socket error");
     exit(1);
   }
  
   /*绑定Socket*/
   z = bind(sockfd,(struct sockaddr *)&adr_inet,sizeof(adr_inet));
   if (z == -1 )
   {
     perror("bind error");
     exit(1);
   }
  
   while(1)
   {  
   /*接收CLIENT 端传来的信息*/
     z = recvfrom(sockfd, buf, sizeof(buf), 0,
         (struct sockaddr *)&adr_clnt, &len);
     if( z < 0)
     {
       perror("recvform error");
       exit(1);
     }
  
     buf[z]=0;
     /*将接收到的信息显示在显示器上*/  
     printf("接收数据:%s",buf);
  
     /*收到stop字符串则结束与client端的连接*/
     if(strncmp(buf, "stop", 4) == 0)
     {
        printf("结束连接.\n");
        break;
     }
   }
   close(sockfd);
   exit(0);
}
注意所读的文件要提前手工建好。
并且SERVER端程序用gcc直接编译,CLIENT要用arm-linu-gcc编译。
阅读(370) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~