Chinaunix首页 | 论坛 | 博客
  • 博客访问: 67664
  • 博文数量: 13
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-14 13:33
文章存档

2011年(1)

2008年(12)

我的朋友

分类: LINUX

2008-05-26 10:43:04

测试socket通信


1.环境
  笔记本(无串口) + win2k系统
  vmware6 + redhat 9 + vmware tools(vmware tools是为了实现VMWARE里REDHAT和WIN2K共享文件夹)
  s3c44b0x目标板一块(已安装uClinux)
  arm-elf-gcc(2.95.3)
  tftp32.exe(随板带的一个tftp工具)
  一条USB-Serial线(PL2303驱动)

2.源程序
  server.c  client.c  见附录

3.先在vmware里编译通过.
  #gcc -o server server.c
  #gcc -o client client.c

  server 和 client可实现通信

4.交叉编译:
  #arm-elf-gcc server.c -o arm_server -Wl,-elf2flt
  #arm-elf-gcc client.c -o arm_client -Wl,-elf2flt
 
  这里有个注意的地方: client.c里服务器的IP是写死的,在交叉编译前要改成目标板的IP.

5.将arm_server和arm_client两个文件转到win2k系统,
  启动tftp32(本人还不会NFS).

6.打开WIN2K的超级终端,打开目标板,待uClinux启动后,进入/var/tmp目录.(目标板上好像只有/var里可以下载文件)
  #tftp 192.168.0.130     (这个IP是WIN2K的IP)
  tftp>binary             (用这个下载到目标板上的文件才能运行)
  tftp>get arm_server
       xxxx bytes xxx     (反正就是传递了多少字节)
  tftp>get arm_client    
       xxxx bytes xxx
 
  退出tftp
  #chmod 777 arm_server
  #chmod 777 arm_client

7.测试
  1).在板子上运行arm_server,在vmware里运行client,可以通信.
  2).在vmware里运行server,在目标板上运行arm_client,可以通信

  看来uglibc这个库兼容性很强.源程序根本不用修改

附录:
---------server.c-----------

#include
#include
#include
#include
#include
#include
#include

int main(){
    int sockfd,clientfd,len;
    struct sockaddr_in server_addr,client_addr;
    char buffer[256];

    sockfd=socket(AF_INET,SOCK_STREAM,0);
    if(sockfd<0){
        perror("create socket error. -> ");
        exit(1);
    }

    server_addr.sin_family=AF_INET;
    server_addr.sin_port=8888;
    server_addr.sin_addr.s_addr=INADDR_ANY;

    if(bind(sockfd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))<0){
        perror("bind socket error. -> ");
        exit(2);
    }

    listen(sockfd,5);
    len=sizeof(struct sockaddr);
   
    printf("waiting for client:\n");

    clientfd=accept(sockfd,(struct sockaddr *)&client_addr,&len);
    /* recv(clientfd,buffer,256,0);*/
    memset(buffer,0,256);
    read(clientfd,buffer,256);

    printf("server received : %s\n",buffer);
    memset(buffer,0,256);
    strcpy(buffer,"server has received your message.");

    /*send(clientfd,buffer,strlen(buffer),0);*/
    write(clientfd,buffer,strlen(buffer));


    close(clientfd);
    close(sockfd);

    return 0;
}

   

------client.c---------

#include
#include
#include
#include
#include
#include
#include

int main(){
    int sockfd,len;
    struct sockaddr_in server_addr;
    char buffer[256];

    sockfd=socket(AF_INET,SOCK_STREAM,0);
    if(sockfd<0){
        perror("create socket error. -> ");
        exit(1);
    }
   
    server_addr.sin_family=AF_INET;
    server_addr.sin_port=8888;
    inet_aton("192.168.0.28",&server_addr.sin_addr.s_addr);

    if(connect(sockfd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))<0){
        perror("unable connect to server. -> ");
        exit(2);
    }
    memset(buffer,0,256);
    strcpy(buffer,"this is a message that client sended.");
    /* send(sockfd,buffer,strlen(buffer),0);*/
    write(sockfd,buffer,strlen(buffer));
   
    /*recv(sockfd,buffer,256,0);*/
    memset(buffer,0,256);
    read(sockfd,buffer,256);

    printf("server said : %s\n",buffer);
   
    close(sockfd);

    return 0;
}
阅读(1284) | 评论(0) | 转发(0) |
0

上一篇:Hello,world

下一篇:LINUX的日志管理

给主人留下些什么吧!~~