socket通信相关函数
1.socket函数
头文件
#include<sys/types.h>
#include<sys/socket.h>
函数
int socket(int domain, int type, int protocol);
domain:协议族
常用的有IPv4(AF_INET), IPv6(AF_INET6)
type:类型
常用的有SOCK_STREAM ,此类型一般是按照顺序的、可靠的、数据完整性是基于字节流的,与之对应的协议是TCP协议;
还有一种是SOCK_DGRAM,此类型是无连接的,不可靠的,固定长度的传输调用,与之对应的是UDP协议
还有其他类型想了解请点击此链接
protocol:协议 一般默认为0(选择与类型匹配的协议)
2.bind函数
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
sockfd:即socket描述字,它是通过socket()函数创建了,唯一标识一个socket。bind()函数就是将给这个描述字绑定一个名字。
addr:一个const struct sockaddr *指针,指向要绑定给sockfd的协议地址。
addrlen:对应的是地址的长度。
3.listen函数
int listen(int sockfd, int backlog);
第一个参数即为要监听的socket描述字,第二个参数为相应socket可以排队的最大连接个数。
4.accept函数
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
第一个参数为服务器的socket描述字,第二个参数为指向struct sockaddr *的指针,用于返回客户端的协议地址,第三个参数为协议地址的长度
5.connect函数
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
第一个参数即为客户端的socket描述字,第二参数为服务器的socket地址,第三个参数为socket地址的长度
注:以下是个人找工作时的笔记(有兴趣可以借鉴,有错误也欢迎指出)
项目上:地面站服务器端:
1.服务器端用socket创建一个套接字
2.调用bind函数来给套接字命名
3.调用listen函数开始监听 等待客户端连接
4.当客户端调用connect请求连接时,服务器调用accept接受客户端连接
无人机客户端:
1.客户端调用socket创建一个未命名套接字,然后将服务器的命名套接字作为地址来调用connect与服务器建立连接,然后用send()和recv(),进行数据的读写。
2.只要双发连接建立成功,就可以实现通信
注意:
1.accept调用成功返回一个新的socketfd 用于与客户端通信(返回的新的值是新的socketfd的值) 原始的socketfd 用于等待新的客户端请求
2.bind(1, 2, 3)参数2 服务器端地址 参数3 服务器端地址长度(类型是非指针)
accept(1, 2, 3)参数2 客户端地址 参数3 客户端地址长度 (指针类型)
参数1都是服务器socketfd(这是最开始创建的用于建立连接用的)
1.1.1 send()与recv()函数
Send(SOCKET s, const char FAR *buf, int len, int flags)
参数(发送端套接字描述符,指向要发送数据的缓冲区,要发送数据的字节数,一般置0)
recv(SOCKET s, char FAR *buf, int len, int flags)
参数(接收端套接字描述符,指向要存放数据的缓冲区,buf的长度,一般置0)
1.1.2 socket中setsocketopt()函数 提高程序健壮性
在send()和rev()过程中有时可能由于网络状况等原因 收发不能预期进行,可以用setsockopt()设置一个收发时限
Int time=1000;//1秒 允许超时的时间
发送时限
setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char*)&time, sizeof(int));
接收时限
setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char*)&time, sizeof(int));
参数(socket描述字,选项级别,设置选项,指向存放选项值的缓冲区,缓冲区大小)
socket通信相关函数相关推荐
- 深入浅出讲解:php的socket通信
对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问: 1. 什么是TCP/IP.UDP? 2. Soc ...
- 基于Java的TCP Socket通信详解(计算机端/Android手机端)
TCP Socket通信是一种比较常用的基于连接的网络通信方式.本文通过Java实现TCP Socket通信,并将其用于计算机端.Android手机端,同时做到代码规范化,实现代码最大化复用. 本文代 ...
- socket read time out解决方法_深入浅出讲解:php的socket通信
来源:https://www.cnblogs.com/aipiaoborensheng/p/6708963.html 对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展, ...
- php sorcket_深入浅出讲解:php的socket通信
对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问: 1. 什么是TCP/IP.UDP? 2. Soc ...
- socket不能bind请求的地址_深入浅出讲解:php的socket通信
对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问: 什么是TCP/IP.UDP? Socket在哪里呢? Socket是什么呢? 你 ...
- 笔记2:VC++ socket通信实例
VC++ socket通信实例 网络中进程之间如何通信 首要解决的问题是如何唯一标识一个进程,在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们 ...
- socket通信常用函数
转自网上资料 accept(接受socket连线) 相关函数 socket,bind,listen,connect 表头文件 #include<sys/types.h> #include& ...
- 深入浅出讲解h5棋牌开发的socket通信
深入浅出讲解h5棋牌开发的socket通信论坛:aqiulian.com,更多php socket通信咨询Q:212303635.对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络 ...
- python 网络编程之Socket通信案例消息发送与接收
背景 网络编程是python编程中的一项基本技术.本文将实现一个简单的Socket通信案例消息发送与接收 正文 在python中的socket编程的大致流程图如上所示 我们来首先编写客户端的代码: # ...
最新文章
- npm package.json文件中的依赖关系,devDependencies和peerDependencies之间有什么区别?
- java transient_【转】Java中的关键字 transient
- mysql二进制升级_MySQL二进制安装,升级,多实例部署
- 数据结构与算法分析资源总结
- 高性能MySQL(3)——创建高性能索引
- 【推荐实践】图片主题模型在推荐系统的应用实践
- 1002. 写出这个数 (20)-PAT乙级真题
- python Flask 使用https 安全协议
- nginx虚拟域名配置
- models.fasttext - FastText模型
- 美年旅游_跟团游_查询分页PageHelper
- net stop sharedaccess命令 2009-1-15 11:10
- 前门狗不理双人餐一份 - 北京团购网|京东团购
- MatLab 数字图像处理实验 图像分割
- 混合现实VR Twitch视频
- Excel中如何快速汇总带单位的数据
- mysql的安全加固方法_MySQL数据库安全加固方法
- 24c512 c语言程序,24C32~24C512的51单片机读写程序
- SQL语句中的嵌套子查询
- 流媒体之色彩转换——RGB(X)与YUV之间转换
热门文章
- windows的系统还原
- 软科计算机科学与工程专业,2019上海软科世界一流学科排名计算机科学与工程专业排名莱斯特大学排名第301-400...
- 涨价!京东运费大调整:提高免运费门槛 加收重量费
- 解决ValueError: (‘Unrecognized keyword arguments:‘, dict_keys([‘ragged‘]))
- promise中如何取到PromiseValue的值,其实很简单
- app里的“搜索提示“是如何实现的?
- Linux下的时间详解【转】
- 博弈论(一)--yale
- c语言实心圆方程式,C语言做实心圆
- 使用iozone进行磁盘读写性能测试