



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验九 Linux网络编程(4课时)实验目的:了解嵌入式网络开发环境的组成,掌握嵌入式网络程序设计实验原理:linux 网络编程是通过socket(套接字)接口实现,socket是一种文件描述符,socket起源于UNIX,在Unix一切皆文件的思想下,socket是一种打开读/写关闭模式的实现,服务器和客户端各自维护一个socket文件,在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。socket 类型 常见的socket有3种类型如下。 (1)流式socket(SOCK_STREAM ) 流式套接字提供可靠的、面向连接的通信流;它使用TCP 协议,从而保证了数据传输的正确性和顺序性。 (2)数据报socket(SOCK_DGRAM ) 数据报套接字定义了一种无连接的服 ,数据通过相互独立的报文进行传输,是无序的,并且不保证是可靠、无差错的。它使用数据报协议UDP。 (3)原始socket(SOCK_RAW) 原始套接字允许对底层协议如IP或ICMP进行直接访问,功能强大但使用较为不便,主要用于一些协议的开发。网络编程主要函数:1.socket:创建一个socket int socket(int family, int type, int protocol);/family指定协议族;type参数指定socket的类型:SOCK_STREAM、SOCK_DGRAM、SOCK_RAW;protocol通常赋值0, socket()调用返回一个整型socket描述符。2.bind:用于绑定IP地址和端口号到socketint bind(int sockfd, struct sockaddr *my_addr, int addrlen);/sockfd是一个socket描述符,my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的针; addrlen常被设置为sizeof(struct sockaddr),bind()函数在成功被调用时返回0;遇到错误时返回-1并将errno置为相应的错误号。3.connect:该函数用于绑定之后的client端,与服务器建立连接int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);/sockfd是目的服务器的sockect描述符;serv_addr是服务器端的IP地址和端口号的地址,addrlen常被设置为sizeof(struct sockaddr)。遇到错误时返回-1,并且errno中包含相应的错误码。4.listen:设置能处理的最大连接数,listen()并未开始接受连线,只是设置sockect为listen模式。 int listen(int sockfd, int backlog); / sockfd是socket系统调用返回的服务器端socket描述符;backlog指定在请求队列中允许的最大请求数 。 5.accept:用来接受socket连接int accept(int sockfd, struct sockaddr *addr, int *addrlen); /sockfd是被监听的服务器socket描述符,addr通常是一个指向sockaddr_in变量的指针,该变量用来存放提出连接请求的客户端地址;addrten通常为一个指向值为sizeof(struct sockaddr_in)的整型指针变量。错误发生时返回一个-1并且设置相应的errno值。6.send:发送数据 int send(int sockfd, const void *msg, int len, int flags); /sockfd是你想用来传输数据的socket描述符,msg是一个指向要发送数据的指针。 len是以字节为单位的数据的长度。flags一般情况下置为0。7.recv:接受数据 int recv(int sockfd,void *buf,int len,unsigned int flags); /sockfd是接受数据的socket描述符;buf 是存放接收数据的缓冲区;len是缓冲的长度。flags也被置为0。recv()返回实际上接收的字节数,或当出现错误时,返回-1并置相应的errno值。8.sendto:发送数据,用于面向非连接的socket(SOCK_DGRAM/SOCK_RAW)int sendto(int sockfd, const void *msg,int len,unsigned int flags,const struct sockaddr *to,int tolen); /该函数比send()函数多了两个参数,to表示目地机的IP地址和端口号信息,而tolen常常被赋值为sizeof (struct sockaddr)。sendto 函数也返回实际发送的数据字节长度或在出现发送错误时返回-1。9.recvform: 接受数据,用于面向非连接的socket(SOCK_DGRAM/SOCK_RAW)int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr *from,int *fromlen); /from是一个struct sockaddr类型的变量,该变量保存源机的IP地址及端口号。fromlen常置为sizeof(struct sockaddr)。当recvfrom()返回时,fromlen包含实际存入from中的数据字节数。Recvfrom()函数返回接收到的字节数或当出现错误时返回-1,并置相应的errno 几个字节顺序转换函数: htons() -Host to Network Short ; htonl()-Host to Network Long ntohs() -Network to Host Short ; ntohl()-Network to Host Long 在这里, h表示host ,n表示network,s 表示short,l表示 long。地址转换函数: in_addr_t inet_addr(const char * strptr); 将字符串IP地址转换为IPv4地址结构in_addr值 char * inet_ntoa(struct in_addr * addrptr); 将IPv4地址结构in_addr值转换为字符串IP 域名和IP地址的转换: struct hostent *gethostbyname(const char *name); 函数返回一种名为hostent的结构类型,它的定义如下: struct hostent char *h_name; /* 主机的官方域名 */ char *h_aliases; /* 一个以NULL结尾的主机别名数组 */ int h_addrtype; /* 返回的地址类型,在Internet环境下为AF-INET */ int h_length; /*地址的字节长度 */ char *h_addr_list; /* 一个以0结尾的数组,包含该主机的所有地址*/ ; #define h_addr h_addr_list0 /*在h-addr-list中的第一个地址*/面向TCP数据流的socket通信程序由基于TCP的服务器和基于TCP的客户端程序组成。TCP的服务器程序结构: 1.创建一个socket,用函数socket() 2.绑定IP地址、端口信息到socket上,用函数bind() 3.设置允许的最大连接数,用函数listen() 4.接受客户端的连接,用函数accept() 5.收发数据,用send()、recv()或者read()、write() 6.关闭网络连接。TCP的客户端程序结构: 1.创建一个socket,用函数socket() 2.设置要连接的服务器的IP地址和端口属性 3.连接服务器,用函数connet() 4.收发数据,用send()、recv()或者read()、write()5.关闭网络连接。面向UDP数据报的socket通信程序由基于UCP的服务器和基于UDP的客户端程序组成。UDP的服务器程序结构: 1.创建一个socket,用函数socket() 2.绑定IP地址、端口信息到socket上,用函数bind() 3.循环接受数据,用函数recvform() 4.关闭网络连接UDP的客户端程序结构: 1.创建一个socket,用函数socket() 2.设置要连接的服务器的IP地址和端口属性 3.发送数据,用函数sento() 4.关闭网络连接实验内容:1. 编写面向TCP数据流的socket通信程序的sever和client端并运行查看运行情况。修改程序实现一个简单的聊天工具。修改了哪些内容,起何作用? 2. 编写面向UDP数据流的socket通信程序的sever和client端并运行查看运行情况。修改程序实现一个简单的聊天工具。修改了哪些内容,起
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年国际美术设计师考试基础内容及答案
- 篮球模拟测试题及答案
- 助理广告师试题及答案知识架构
- 2024年助理广告师备考心得与实战经验分享试题及答案
- 植物辨识考试题及答案
- 2024年国际设计师考试的综合准备建议试题及答案
- 于设计教育中的广告设计课程建设探讨试题及答案
- 新材料在纺织品设计中的应用举例试题及答案
- 小升初舞蹈测试题及答案
- 北大竞赛数学试题及答案
- DB3208T 213-2024国有资产管理工作规范
- 2025北京九年级(上)期末语文汇编:句子默写
- 2025-2030中国浆果行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国网络贷款(融资)行业市场发展现状及发展趋势与投资研究报告
- 基建招聘面试题及答案
- 华为测试面试题及答案
- 漂珠销售合同协议
- 2025化学中考解题技巧 专题10 技巧性计算(解析版)
- 部门加班调休管理制度
- 考勤制度操作指南
- 垃圾焚烧发电厂应急预案
评论
0/150
提交评论