首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于S3C44B0X的嵌入式Socket通信设计(1)

基于S3C44B0X的嵌入式Socket通信设计(1)

客户端代码相对来说要简单一些,首先通过服务器域名获得其IP地址,然后创建一个socket,接着调用connect函数来与服务器建立连接,连接成功之后再接收从服务器发送过来的数据,最后在通信结束后关闭socket。 综上所述,网络程序客户端和服务器端进行Socket通信的建立步骤如下 服务器端:socket →bind →listen→accept 客户端:socket →bind →connect 本设计使用的套接字为流式套接字,下面是运行于32位微处理器S3C44B0X嵌入式开发平台的客户端应用程序 #include #include #include #include #include #include #include #include #include #include int main(int argc,char *argv[]) { int s; char buffer[256]; struct sockaddr_in addr; struct hostent *hp; struct in_addr in; struct sockaddr_in local_addr; if (argc < 2) return; if(!(hp=gethostbyname (argv[1]))){ fprintf(stderr,"Can't resolve host.\n"); exit (1); } if ((s = socket(AF_INET,SOCK_STREAM,0))<0){ perror ("socket"); exit (1); } bzero (&addr,sizeof (addr)); addr.sin_family = AF_INET; addr.sin_port=htons((unsigned short)atoi(argv[2])); hp = gethostbyname(argv[1]); memcpy(&local_addr.sin_addr.s_addr,hp->h addr,4); in.s_addr = local_addr.sin_addr.s_addr; printf ("Domain Name%s\n"argv printf ("IP address :%s\n",inet_ntoa (in)); printf("%s,%s\n",hp->h_name,argv[2]); addr.sin_addr.s_addr=inet_addr(hp->h_name); ifconnect(s,(struct sockaddr *)&addr,sizeof (addr))<0){ perror ("connect"); exit (1); } recv (s,buffer,sizeof (buffer),0); printf ("%s\n",buffer); while(1); bzero(buffer,sizeof (buffer)); read (STDIN_FILENO,buffer,sizeof(buffer)); if (send (s,buffer,sizeof (buffer),0)<0){ perror ("send"); exit (1); } } } 4 结束语 设计开发了基于S3C44B0X的以太网通信系统,并利用uClinux操作系统强大的网络功能实现了Socket通信。由于uClinux目前只支持flat格式的可执行文件,因此本设计是在先建立好uClinux开发环境的情况下,把用户自行开发的应用程序通过宿主PC机上的交叉编译器转化为flat格式,然后再通过FTP添加到目标硬件开发平台上运行的。文中的客户端应用程序已经在基于ARM7TDMI核的S3C44B0X处理器的嵌入式开发平台上成功运行,并成功地和宿主PC机的服务器端应用程序实现了Socket通信。当然,也可以把目标硬件开发平台当作服务器端,而把宿主PC机当作客户端来进行双向文件传输。
返回列表