首 页       用户登录  |  用户注册
设为首页
加入收藏
联系我们
按字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
按声母检索 A B C D E F G H J K L M N O P Q R S T W X Y Z 数字 符号
您的位置: 5VAR论文频道论文中心理工论文电子通信
   基于uCLinux和S3C4510B的网络通信设计      ★★★ 【字体: 】  
基于uCLinux和S3C4510B的网络通信设计
收集整理:佚名    来源:本站整理  时间:2009-01-10 23:49:46   点击数:[]    

协议类型(使用IPv4的TCP、使用IPv6的UDP、Unix域字节流协议等),其函数结构如下:int socket(int family,int type,int protocol);

/*返回:非负描述字—成功,-1—出错*/

代码中的family指明协议族。套接口的类型type是某个常值。一般来说,函数socket的参数protocol主设置为0,socket函数成功时返回一个小的非负整数值。为了得到这个数值,我们指定协议族(IPv4IP、v6或Unix)和套接口类型(字节流、数据报或原始套接口)。

(2)connect函数

TCP客户用connect函数来建立一个与TCP服务器的连接。

Int connect(int sockfd,const struct sockaddr* servaddr,socklen_t addrlen);/*返回:0—成功,-1—出错*/

Sockfd由socket函数返回数值,第二、第三个参数分别是一个批晌套接口地址结构的指针和该结构的大小。套接口叶址结构必须含有服务器的IP地址和端口号。

(3)bind函数

函数bind给套接口分配一个本地协议地址。对于网际协议,协议地址是非颠倒2位IPv4地址16位的TCP或UDP端口号的组合。

Int bind(int sockfd,const struct sockaddr* myaddr,socklen_t addrlen);/*返回:0—成功,-1—出错*/

第二个参数量个指向特定于协议地址结构的指针,第三个参数是该地址结构的长度。对于TCP,调用函数bind可以指定一个端口,指定一个IP地址。可以两者都指定,也可以一个也不指定。

(4)listen函数

函数listen仅被除数TCP服务器调用。它做两件事件事情,当函数socket创建一个套接口时,被假设为一个主动套接口。也就是说,它是一个将调用connect发起连接的客户套接口,函数listen将未连接的套接口转换成被动套接口,指示内核应接受指向此套接口的连接请求。根据TCP状态转换调用函数listen导致套接口从CLOSED状态转换到LISEN状态。函数的第二个参数规定了内核为此套接口排队的最大连接个数。

Int listen(int sockfd,int backlog);

/*返回:0—成功,-1—出错*/

一般来说,此函数应在调用函数socket和bind之后,调用函数accept之前调用。

(5)accept函数

accept函数由TCP服务器调用,从已完成连接队列头返回下一个已完成连接。若已完成连接队列为空,则进程睡眠。(假定套接口噗缺省的阻塞方式)

int accept(int sockfd,struct sockaddr*cliaddr,socklen_t*addrlen);/*返回非负数值—OK,-1—出错*/

参数cliaddr和addrlen用来返回连接对方进程(客户)的协议地址。Addrlen是结果参数,调用前,将由*addrlen所指示的整数值置为由cliaddr所旨的套接口地址结构的长度,返回时,此整数值即为由内核存在此套接口地址结构内的准确字节数。

3.2 uClinux中网络通信编程的实现

在uCLinux中进行socket编程,一般按照图书资料所示流程编写网络应用程序。

除了熟悉前文提出的函数外,还应知道两个重要的数据结构。因为在计算机中,数据存储有两种字节优先顺序:高位字节优先和低位字节优先。在互联网上,数据是以高位字节优先顺序传输的,所以对于在内部以低位字节优先方式存储的数据,需要进行转换才能在互联网上传输。

*struct sockaddr:用来保存socket信息

struct sockaddr{unsigned short sa_family;/*地址族,AF_xxx*/

char sa_data[14]; /*14字节的协议地址*/};

*struct sockaddr_in;和来进行数据类型的转换

struct sockaddr_in{

short int sin_family; /*地址族*/

unsigned short int sin_port; /*端口号*/

sruct in_addr sin_addr; /*IP地址*/

unsigned cha sin_zero[8]; /*填充0,以保持与struct sockaddr同样大小*/};

至此,可经编出uCLinux的网络通信工程程序。在此给出部分uCLinux下实现网络通信源代码及其Makefile文件的编写实例。

main()函数中部分代码如下:

int sockfd;

unsigned int uiip;

char szsendbuf[1024];

char head[8];

int*phead=head+4,nsize=1024,allsize=0;

struct sockaddr_in servaddr;

sockfd=socket(AF_INET,SOCK_STREAM,0);/*创建socket*/

bzero(&servaddr,sizeof(struct sockaddr_in));

servaddr.sin_family=AF_INET;

servaddr.sin_port=8888;//htons(8888); /*指定通信端口*/将命令行输入的字符串IP转换为connect函数可识别的整数uiip。本来在Linux上开发时可以使用C库函数inet_pton(),但在uCLinux的库中不支持该函数,因此只好自己实现该函数的功能。

aiptoi()如下所示:

aiptoi(argv[1],&uiip);

servaddr.sin_addr.s_addr=uiip; /*指定连接的对端IP*/

connect(sockfd,(struct sockaddr)&servaddr,sizeof(struct sockaddr));

/*连接对端接收代码*/

fp=fopen("kongzhi.htm","r"); /*打开控制页面*/

while(nsize==1024)

{bzero(szsendbuf,1024); /*每次从文件中读取巧024个字节发送出去,若读出少于1024字节结束*/

nsize=phead=fread(szsendbuf,1,1024,fp);/*从文件中读取并填入发送BUFFER中*/

write(sockfd,head,8);/*发送协议头*/

nsize=write(sockfd,szsendbuf,nsize);/*发送*/}

fclose(fp);

uCLinux中的Makefile需做的修改如下:

CC=gcc

COFF2FLAT=/uclinux/coff2flt-0.3/coff2flt

CFLAGS=-I/uclinux/uC-libc-pic/i

上一页  [1] [2] [3]  下一页


Tags:


文章转载请注明来源于:5VAR论文频道 http://paper.5var.com。本站内容整理自互联网,如有问题或合作请Email至:support@5var.com
或联系QQ37750965
提供人:佚名
  • 上一篇文章:嵌入式网络控制器CS6208及其应用

  • 下一篇文章:基于ARM-μCLinux嵌入式系统启动引导的实现
  • 返回上一页】【打 印】【关闭窗口
    中查找“基于uCLinux和S3C4510B的网络通信设计”更多相关内容 5VAR论文频道
    中查找“基于uCLinux和S3C4510B的网络通信设计”更多相关内容 5VAR论文频道
    最新热点 最新推荐 相关新闻
  • ››嵌入式系统的通信规约管理平台设计...
  • ››一种基于七号信令的局间话单采集系...
  • ››对于变频器的制动技术分析
  • ››电子文件管理元数据宏观结构多维分...
  • ››浅论卫星电视接收机的常见故障的检...
  • ››信息时代网络用户信息检索焦虑的心...
  • ››论GIS在高校房产管理中的实际应用
  • ››关于电力通信发展战略的思考 金李莎...
  • ››2G、3G切换精细化优化分析思路探讨...
  • ››光纤自动化生产的需求与时机
  • ››基于uCLinux和S3C4510B的网络通信设...
  • ››基于UC3846的大功率DC/DC变换器的研...
  •   文章-网友评论:(评论内容只代表网友观点,与本站立场无关!)
    关于本站 - 网站帮助 - 广告合作 - 下载声明 - 网站地图
    Copyright © 2006-2033 5Var.Com. All Rights Reserved .