socket数据的发送和接收
下文对计算机socket编程的讲解通俗易懂,对我自己回顾以前的知识,以及学习很有帮助,感谢原作的分享!在此转载。
原文地址:http://c.biancheng.net/cpp/html/3037.html
在 Linux 和 Windows 平台下,使用不同的函数发送和接收 socket 数据,下面我们分别讲解。
Linux下数据的接收和发送
Linux 不区分套接字文件和普通文件,使用 write() 可以向套接字中写入数据,使用 read() 可以从套接字中读取数据。
前面我们说过,两台计算机之间的通信相当于两个套接字之间的通信,在服务器端用 write() 向套接字写入数据,客户端就能收到,然后再使用 read() 从套接字中读取出来,就完成了一次通信。
write() 的原型为:
ssize_t write(int fd, const void *buf, size_t nbytes);
fd 为要写入的文件的描述符,buf 为要写入的数据的缓冲区地址,nbytes 为要写入的数据的字节数。
size_t 是通过 typedef 声明的 unsigned int 类型;ssize_t 在 "size_t" 前面加了一个"s",代表 signed,即 ssize_t 是通过 typedef 声明的 signed int 类型。
write() 函数会将缓冲区 buf 中的 nbytes 个字节写入文件 fd,成功则返回写入的字节数,失败则返回 -1。
read() 的原型为:
ssize_t read(int fd, void *buf, size_t nbytes);
fd 为要读取的文件的描述符,buf 为要接收数据的缓冲区地址,nbytes 为要读取的数据的字节数。
read() 函数会从 fd 文件中读取 nbytes 个字节并保存到缓冲区 buf,成功则返回读取到的字节数(但遇到文件结尾则返回0),失败则返回 -1。
Windows下数据的接收和发送
Windows 和 Linux 不同,Windows 区分普通文件和套接字,并定义了专门的接收和发送的函数。
从服务器端发送数据使用 send() 函数,它的原型为:
int send(SOCKET sock, const char *buf, int len, int flags);
sock 为要发送数据的套接字,buf 为要发送的数据的缓冲区地址,len 为要发送的数据的字节数,flags 为发送数据时的选项。
返回值和前三个参数不再赘述,最后的 flags 参数一般设置为 0 或 NULL,初学者不必深究。
在客户端接收数据使用 recv() 函数,它的原型为:
int recv(SOCKET sock, char *buf, int len, int flags);
socket数据的发送和接收相关推荐
- python socket发送组播数据_python3通过udp实现组播数据的发送和接收操作
本文主要通过对海康摄像头进行抓包,模拟发送了udp包,并抓取摄像头返回的数据包,解析并提取相关信息. 通过抓包发现,海康摄像头发送.接收数据使用udp协议,后来比较发现,使用python模拟起来比较简 ...
- python获取本地时间并向服务器发送udp报文_python3通过udp实现组播数据的发送和接收操作...
本文主要通过对海康摄像头进行抓包,模拟发送了udp包,并抓取摄像头返回的数据包,解析并提取相关信息. 通过抓包发现,海康摄像头发送.接收数据使用udp协议,后来比较发现,使用python模拟起来比较简 ...
- rocket mq 监听端口_如何使用Jmeter实现MQ数据的发送和接收?性能测试实战篇
JMeter是性能测试中被普遍使用的一种工具,常用于压力测试.该工具具有丰富的扩展插件用以满足不同情况下性能测试的需求.消息队列(Message Queue)简称为MQ,作为目前的主流中间件,在很多软 ...
- java串口发送十六进制数,本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下1.介绍使用Java实现的串口通信程序,支持十六进制数据的发送与接收。 源码:...
本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下 1.介绍 使用Java实现的串口通信程序,支持十六进制数据的发送与接收. 源码:SerialPortDemo 效果图如下: ...
- python - udp socket通信循环发送和接收数据
运行结果:(在测试的过程中udp_client.py中的send_addr要设置为:接收方的IP地址) udp_client.py: #coding=utf-8 import socketdef ma ...
- Android Wear开发 - 数据通讯 - 第二节 : 数据的发送与接收
本节由介绍3种数据的发送接收: 1.Data Items : 比特类型数据,限制100KB以内 2.Assets : 资源类型数据,大小无上限 3.Message : 发送消息,触发指令 http:/ ...
- ZigBee组网机制以及数据的发送和接收
Zigbee是一种新型的短距离无线通信技术.其特点是低功耗,低成本,组网灵活.Zigbee协议由zigbee联盟指定,包括应用层,和网络层,其下层采用IEEE802.15.4协议. 无论是学习zigb ...
- java-UDP协议实现数据的发送和接收
实现发送端 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; im ...
- 关于串口数据的发送和接收(调试必备)
前言 对于串口的数据发送和接收,大多是都是利用串口中断来进行的,但是这样对于编程方面有一定要求,并且程序也不太好写,比如说,如果让你随意接收一段数据,然后利用串口将它发送出来,第一个需要考虑的问题就是 ...
- 教学5层网络体系结构——分层之后数据的发送和接收
协议分层后数据发送过程 发送方层层封装 接收方层层解封装 唯一加尾部的是数据链路层 思考 发送方某层封装完如何知道该交给哪个下层封装? 应用层选择传输层由应用程序决定,传输层选择网络层由固定的搭配,例 ...
最新文章
- HDU1878(判断一个无向图是否存在欧拉回路)
- 「每天一道面试题」下面的代码有问题吗?为什么?
- 关于个别网段上网时断时续的问题解决
- mybaits十七:使用foreach标签
- MemoryStream类
- Event Bus 设计模式学习笔记
- LVM基本应用 扩展及缩减实现
- 选择Windows CE wince嵌入式操作系统 的十大理由
- 我的世界工业服务器透视修改,教程/透视镜 - Minecraft Wiki,最详细的官方我的世界百科...
- Java基础教程【第二章:Java数据类型和变量】
- UVa 483 - Word Scramble
- php smarty 翻译标签,Smarty自定义block标签
- 纯js制作的XML在线编辑器(支持修改本地文件)
- 【转】使用chrome插件Page Monitor监控网页内容变化
- 三国演义人物词频统计 -- Python
- JavaScript按住鼠标左键选中元素, 实现框选(Rubberband)效果
- java中的steam流
- RFSoC应用笔记 - RF数据转换器 -04- RFSoC关键配置之RF-ADC内部解析(二)
- 系统架构设计基础(一)
- 音视频入门系列-服务器篇(nginx-rtmp 的部署)
热门文章
- html未点击背景 点击背景,vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)...
- python 虚拟环境 windows_Python虚拟环境(Windows版)
- python sleep 毫秒_如何在python中休眠Webdriver毫秒
- python玩转单片机_Python玩转单片机:从基础到进阶,几款主流的开发板大盘点!...
- ip地址在c语言中长度是多少_c语言中(++i)+(++i)+(++i)究竟等于多少?
- java spark命令行执行参数
- dlp型3d打印机_创想三维一台3d打印机是多少钱
- java重构三部曲,建构·解构·重构——漫谈批注式阅读三部曲
- 华为mate20云备份恢复卡住了_注意了!包括华为、荣耀在内的14款老机型开启EMUI11公测了...
- .net 怎么在控制器action中返回一个试图_ASP.NET Core MVC/WebAPI中另辟蹊径的全局统一异常处理方式...