- 论坛徽章:
- 0
|
以太网测试
先测试一下简单点的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
{
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
{
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
{
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
{
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编译。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/68643/showart_1085494.html |
|