社区首页
技术讨论创新帖
全部新帖
资料区
社区活动
联系管理员
★ 社区积分制度
★ 新手必读
★ 申请版主★
请
登录
后使用快捷导航
没有帐号?
注册
首页
|
电子技术
|
嵌入式
模拟电子
单片机
电源管理
传感器
半导体
电子应用
|
工业控制
物联网
汽车电子
网络通信
医疗电子
手机便携
测试测量
安防电子
家用电子
机器人
新能源
电子头条
|
社区
|
论坛
测评
博客
大学堂
|
下载
|
下载中心
电路图
精品文集
电路图
|
参考设计
|
Datasheet
|
活动
|
直播
datasheet
datasheet
文章
搜索
登录
注册
论坛
切换旧版
电子工程世界-论坛
»
论坛
›
休息一下
›
信息发布
›
百问FB网络编程 - 主要函数介绍
返回列表
发新帖
回复
阅
144
|
回
0
aleksib
当前离线
纯净的硅(中级)
最后登录
2025-1-6
在线时间
40 小时
威望
998分
芯积分
511分
(兑换)
E金币
0枚
(兑换)
(兑换)
好友
0
aleksib
287
帖子
0
TA的资源
纯净的硅(中级)
+ 好友
私信
楼主
发表于2024-12-4 09:56
只看该作者
百问FB网络编程 - 主要函数介绍
[复制链接]
## **6.3** **网络编程主要函数介绍** 下面全部函数的头文件都是 ```c #include
#include
``` ### 6.3.1 socket函数 ```c int socket(int domain, int type,int protocol); ``` 此函数用于创建一个套接字。 **domain**是网络程序所在的主机采用的通讯协族(AF_UNIX和AF_INET等)。 AF_UNIX只能够用于单一的Unix 系统进程间通信,而AF_INET是针对Internet的,因而可以允许远程通信使用。 **type**是网络程序所采用的通讯协议(SOCK_STREAM,SOCK_DGRAM等)。 SOCK_STREAM表明用的是TCP 协议,这样会提供按顺序的,可靠,双向,面向连接的比特流。 SOCK_DGRAM 表明用的是UDP协议,这样只会提不可靠,无连接的通信。 关于**protocol**,由于指定了type,所以这个地方一般只要用0来代替就可以了。 此函数执行成功时返回文件描述符,失败时返回-1,看errno可知道出错的详细情况。 ### 6.3.2 bind函数 ```c int bind(int sockfd, struct sockaddr *my_addr, int addrlen); ``` 从函数用于将地址绑定到一个套接字。一台电脑上可能有多个IP和端口,这个套接字要绑定到哪个IP和端口需要用bind函数来绑定。 **sockfd**是由socket函数调用返回的文件描述符。 **my_addr**是一个指向sockaddr的指针。 **addrlen**是sockaddr结构的长度。 **sockaddr**的定义: ```c struct sockaddr{ unisgned shortas_family; char sa_data[14]; // 这14个字节里面,含有 IP 和 端口,但是不明显 }; ``` 不过由于系统的兼容性,我们一般使用另外一个结构(struct sockaddr_in) 来代替。 **sockaddr_in**的定义: **sockaddr** 和 **sockaddr_in** 结构体的大小是完全一样的, ```c struct sockaddr_in{ unsigned short sin_family; unsigned short sin_port; // 2字节 表示端口 struct in_addr sin_addr; // 4字节 表示IP地址 unsigned char sin_zero[8]; // 8字节 不用2+4+8=14字节,和上面那个结构体一样 } ``` 如果使用Internet所以sin_family一般为AF_INET。 sin_addr还是一个结构体,sin_addr.s_addr 设置为INADDR_ANY表示可以和主机的所有IP通信,也就是监测所有的IP。 sin_port是要监听的端口号。要使用 htons(SERVER_PORT)端口号转换为网络字节序 bind将本地的端口同socket返回的文件描述符捆绑在一起. 成功是返回0,失败的情况和socket一样,返回 -1。 ### 6.3.3 listen函数 ```c int listen(int sockfd,int backlog); ``` 此函数宣告服务器可以接受连接请求。 **sockfd**是bind后的文件描述符。 **backlog**设置请求排队的最大长度。当有多个客户端程序和服务端相连时,使用这个表示可以介绍的排队长度。 listen函数将bind的文件描述符变为监听套接字。 成功是返回0,失败的情况和socket一样,返回 -1。 ### 6.3.4 accept函数 ```c int accept(int sockfd, struct sockaddr *addr,int *addrlen); ``` 服务器使用此函数获得连接请求,并且建立连接。 **sockfd**是listen后的文件描述符。 **addr**,**addrlen**是用来给客户端的程序填写的,服务器端只要传递指针就可以了, bind,listen和accept是服务器端用的函数。 accept调用时,服务器端的程序会一直阻塞到有一个客户程序发出了连接。 accept成功时返回最后的服务器端的文件描述符,这个时候服务器端可以向该描述符写信息了,失败时返回-1 。 (可以认为这个描述符是这个客户端的象征,之后接收发送就向该描述符操作) 问:如何把客户端的IP地址转换为我们常见的形式? 答:inet_ntoa(sockaddr.sin_addr) 把这个 sin_addr 转换为 ascii 格式的字符串 ### 6.3.5 connect函数 对于TCP的连接,这里会有3次握手 对于UDP的连接,这里是虚假的连接,目的只是为了获得IP地址这些数据而已 ```c int connect(int sockfd, struct sockaddr * serv_addr,int addrlen); ``` 可以用connect建立一个连接,在connect中所指定的地址是想与之通信的服务器的地址。 **sockfd**是socket函数返回的文件描述符,客户端的文件描述符。 **serv_addr**储存了服务器端的连接信息,其中sin_add是服务端的地址。 **addrlen**是serv_addr的长度。 connect函数是客户端用来同服务端连接的 成功时返回0,sockfd是同服务端通讯的文件描述符(客户端),失败时返回-1。 ### 6.3.6 send函数 ```c ssize_t send(int sockfd, const void \*buf, size_t len, int flags); ``` **sockfd** 指定发送端套接字描述符; **buf** 指明一个存放应用程序要发送数据的缓冲区; **len** 指明实际要发送的数据的字节数; **flags** 一般置0。 客户或者服务器应用程序都用send函数来向TCP连接的另一端发送数据 ### 6.3.7 recv函数 【没有数据会休眠】 ```c ssize_t recv(int sockfd, void *buf, size_t len, int flags); ``` **sockfd** 指定接收端套接字描述符; **buf** 指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据; **len** 指明buf的长度,也就是最多可以接收多少字节的数据; **flags** 一般置0。 客户或者服务器应用程序都用recv函数从TCP连接的另一端接收数据。 返回值:平时会阻塞,有数据就返回实际接收到了多少个数据 if(iRecvLen <= 0)// 则表示出错了 ### 6.3.8 recvfrom函数(UDP) 【没有数据会休眠】 ```c ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); ``` recvfrom通常用于【无连接】套接字,因为此函数可以获得发送者的地址。 **src_addr** 是一个struct sockaddr类型的变量,该变量保存源机的IP地址及端口号。 **addrlen** 常置为sizeof (struct sockaddr)。 ### 6.3.9 sendto函数(UDP) ```c ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); ``` sendto和send相似,区别在于sendto允许在无连接的套接字上指定一个目标地址。 **dest_addr** 表示目地机的IP地址和端口号信息, **addrlen** 常常被赋值为sizeof (struct sockaddr)。注意这个不是传入地址了。 **sendto** 函数也返回实际发送的数据字节长度或在出现发送错误时返回-1。 ### 6.3.10 close函数 ```c close(iSocketClient); ``` ### 6.3.11 辅助函数 ```c #include
// 将 short 类型的整型端口号转换为 sockaddr_in 中的 sin_port 类型的网络端口号 // 将主机字节顺序转换为网络字节顺序 uint16_t htons(uint16_t hostshort); ``` ```c #include
#include
#include
// 将 IP 地址结构体转换为 ascii码常见格式 char *inet_ntoa(struct in_addr in); $ ./a.out 226.000.000.037 # Last byte is in octal 226.0.0.31 $ ./a.out 0x7f.1 # First byte is in hex 127.0.0.1 // 参数1:cp 就是 192.168.1.1 这种格式的IP地址字符串 // 参数2:inp 就是 struct in_addr 格式的IP地址,也就是 int inet_aton(const char *cp, struct in_addr *inp); ```
此帖出自
信息发布论坛
点赞
关注
(0)
回复
分享
扫一扫,分享给好友
复制链接分享
链接复制成功,分享给好友
举报
提升卡
变色卡
千斤顶
返回列表
发新帖
回复
您需要登录后才可以回帖
登录
|
注册
发表回复
回帖后跳转到最后一页
活动
更多>>
Microchip 直播|多相降压电源控制技术的发展与探讨 报名中!
安世半导体智能工业应用探索站,闯关赢好礼!
PI 电源小课堂:集成式半桥驱动IC BridgeSwitch 2, 助力高效永磁同步电机逆变器的设计
Microchip喊你探索dsPIC33A 芯片,70份好礼等你赢!
【瓜分2500元红包】票选2024 DigiKey “感知万物,乐享生活”创意大赛人气作品TOP3!
DigiKey应用探索站重磅上线!潮流应用,硬核技术探秘,N多干货,一站get!
验证并选择心仪MOSFET,探寻选型奥秘!注册、体验双重好礼等你拿~
免费申请测评 | 泰坦触觉 TITAN Core开发套件
开源项目
更多>>
使用 Analog Devices 的 LT3091HDE 的参考设计
LTC3642IDD-3.3 正负降压转换器的典型应用电路
STC8G1K彩色示波器
具有双输入的 LTC3126MPFE 3.3V、2MHz 降压转换器的典型应用电路
计时,BBS 为 PCF2127AT TCXO 提供微控制器应用
LED声控灯
NCV3063 1.5A 降压型开关稳压器的典型降压应用原理图
使用 Cypress Semiconductor 的 MB3800PF 的参考设计
DC388C,使用 LTC1923 高效热电冷却器控制器的演示板
ElectronBot_servodrive
随便看看
读书活动入围名单:《ROS2智能机器人开发实践》
感谢网友关注《ROS2智能机器人开发实践》阅读活动,以下是入围网友信息。入围的网友请注意,请在2025年1月22日12:00前:(1)核对邮寄信息:点此查看您的论坛个人信息中姓名、电话、地址;(2)确认阅读计划:看下方您提交的阅读计划;(3)以上确认后,请跟 ...
【B-G431B-ESC1-无刷电机板】3-开环VF强拖
无线一体化改造!焦化四大车无线联锁再升级
关于直流电机测速
关于单片机控制TC35i模块的问题
CH554评测:6.触摸按键点亮LED
【藏书阁】SDH&WDM同步数字体系设备与系统
求教:2272不解码输出
查找数据手册?
搜索
EEWorld Datasheet 技术支持
热门标签
源代码
单片机
放大器
TI
ST
电源
分立器件
传感器
测试测量
模拟
单片机和plc的区别
直线直流电动机
红外线传感器
CMOS逻辑电路
单极晶体管
rc移相电路
油浸电容
并联谐振
CC-link
闪存
相关文章
更多>>
苹果M4 Mac mini曝出USB-C接口问题!随机间歇性断开连接
1月17日消息,苹果M4 Mac mini自2024年底发布以来,收获了不少好评,然而近期一些用户在使用过程中发现,该设备的USB-C接口似乎存在连接性问题,给使用带来了不便。 有用户反映M4 Ma
消息称 SK 海力士有望 2 月启动业界最先进 1c nm 制程 DRAM 内存量产
1 月 17 日消息,韩媒 MT(IT之家注:全称 MoneyToday)当地时间今日报道称,SK 海力士近日已成功完成内存业界最先进 1c 纳米制程 DRAM 的批量产品认证,连续多个以 25 块
未经同意出售用户数据,通用汽车遭美国 FTC 处罚
1 月 17 日消息,当地时间周四,美国联邦贸易委员会(FTC)宣布通用汽车及其子公司 OnStar 因未经用户同意出售用户位置和驾驶行为数据,因此将对其进行处罚,包括在五年内禁止向消费者报告机构披
日本三井住友银行推出半导体设备抵押贷款,铠侠已率先获益
联想宣布收购Infinidat,扩充高端企业存储业务
台积电董事长:我们不是美积电 最先进制程不会搬到美国
曝台积电拒绝代工三星Exynos处理器:理由是怕泄密
SK 海力士被曝上半年削减 10% NAND 闪存产量
苹果加入UALink联盟 成员含AMD、英特尔、谷歌等公司
英特尔宣布将逐渐停产第 12 代 Alder Lake 移动处理器,覆盖酷睿、奔腾及赛扬
新帖速递
STM32和无源蜂鸣器播放声音的问题
车规级AECQ200介绍,混合铝电解电容器的选择
嵌入式教程_DSP技术_DSP实验箱操作教程:2-28 搭建轻量级WEB服务器实验
OPA847IDBVR运放器国产替代
AG32VF407测试UART
【得捷电子Follow Me第二期】第一章 收到货物的分享
请问这个红外接收头是什么型号?能用哪个型号代替?谢谢
出售全新未拆封ZYNQ 7Z020 FPGA核心板
用在锂电池供电的水表设置上的LORA模块,当有100块水表集中安装在一个楼道内时,节能
请问一下,当某个端口被设置为 RX0后,这个端口的输入输出方向还有必要设置吗
今年怎么这么难,比疫情时还难,三十了面临失业好迷茫
请教稳压管测试问题
【小华HC32F448测评】关于小华半导体的UART中断发送和PRINTF构造和重定向
【BIGTREETECH PI开发板】 HDMI输出测试
【BIGTREETECH PI开发板】+08.音频测试(zmj)
安世半导体智能工业应用探索站,闯关赢好礼!
点击页面内“开始探索”按钮,填写并提交表单;
请根据序号依次完成3个安世半导体智能工业应用的探索,并根据给出的资料完成共计9题(每个应用3题),答对5题以上的玩家即可获得抽奖资格;
每人仅有一次参与答题的机会,请慎重作答,活动结束后,我们将抽取30位玩家赠送礼品。
查看 »
Microchip 直播|多相降压电源控制技术的发展与探讨 报名中!
直播主题:多相降压电源控制技术的发展与探讨
直播时间:2025年2月25日(星期二)上午10:30-11:30
快来报名!
查看 »
回帖赢好礼 | 关于无线技术的那些事儿
【活动时间】即日起—2025年1月31日
【活动好礼】50元京东卡
查看 »
答题赢好礼,PI电源小课堂第3期来啦!
本期内容:集成式半桥驱动IC BridgeSwitch 2, 助力高效永磁同步电机逆变器的设计
活动时间:即日起-2月28日
看视频答题即可赢取京东卡!
查看 »
Microchip喊你探索 dsPIC33A 芯片,70份好礼等你赢!
活动时间:即日起-1月26日
活动奖励:随身Wi-Fi、家用多功能电烤箱、20000mAh充电宝、50元京东卡
查看 »
DigiKey应用探索站重磅上线!潮流应用,硬核技术探秘,N多干货,一站get!
当月好物、热门技术资源、潮流应用技术、特色活动、DigiKey在线实用工具,干货多多~
查看 »
本周精选下载推荐:电源管理基础Dummies
本周小编给大家带来一本超简单、超干货的电子书——《电源管理基础Dummies》!内容深入浅出,排版舒服简洁,分分钟能get到电源管理最核心的知识内容。
查看 »
下载资料赢好礼!看Vicor模块化电源解决方案如何推动创新
活动时间:即日起-2024年12月31日
如何参与:点击活动页内您想了解的模块,找到资料下载即可参与抽奖,活动结束后统一发奖!
查看 »
关闭
站长推荐
1
/8
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
电信业务审批[2006]字第258号函
京公网安备 11010802033920号
Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复
返回顶部
返回列表
论坛首页
版块列表
专业技术中心
TI技术论坛
ST传感器与低功耗无线技术论坛
ADI参考电路
DigiKey得捷技术专区
ADI · 世健工业技术
电子技术交流
嵌入式系统
单片机
国产芯片交流
电机驱动控制
FPGA/CPLD
模拟电子
电源技术
PCB技术
RF/无线
传感器
综合技术交流
下载中心专版
大学堂专版
测评中心专版
创意与实践
电子竞赛
DIY/开源硬件专区
淘e淘
创意市集
行业应用
汽车电子
移动便携
医疗电子
工控电子
安防电子
休息一下
聊聊、笑笑、闹闹
工作这点儿事
为我们提意见&公告
EEWorld颁奖专区
信息发布
最新帖子
最新帖子
最新回复
精华
消灭零回复
测评中心
活动中心
积分兑换
E金币兑换
芯积分
厂商专区
TI技术论坛
ST传感器与低功耗无线技术论坛