测试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) |