下文对计算机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数据的发送和接收相关推荐

  1. python socket发送组播数据_python3通过udp实现组播数据的发送和接收操作

    本文主要通过对海康摄像头进行抓包,模拟发送了udp包,并抓取摄像头返回的数据包,解析并提取相关信息. 通过抓包发现,海康摄像头发送.接收数据使用udp协议,后来比较发现,使用python模拟起来比较简 ...

  2. python获取本地时间并向服务器发送udp报文_python3通过udp实现组播数据的发送和接收操作...

    本文主要通过对海康摄像头进行抓包,模拟发送了udp包,并抓取摄像头返回的数据包,解析并提取相关信息. 通过抓包发现,海康摄像头发送.接收数据使用udp协议,后来比较发现,使用python模拟起来比较简 ...

  3. rocket mq 监听端口_如何使用Jmeter实现MQ数据的发送和接收?性能测试实战篇

    JMeter是性能测试中被普遍使用的一种工具,常用于压力测试.该工具具有丰富的扩展插件用以满足不同情况下性能测试的需求.消息队列(Message Queue)简称为MQ,作为目前的主流中间件,在很多软 ...

  4. java串口发送十六进制数,本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下1.介绍使用Java实现的串口通信程序,支持十六进制数据的发送与接收。 源码:...

    本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下 1.介绍 使用Java实现的串口通信程序,支持十六进制数据的发送与接收. 源码:SerialPortDemo 效果图如下: ...

  5. python - udp socket通信循环发送和接收数据

    运行结果:(在测试的过程中udp_client.py中的send_addr要设置为:接收方的IP地址) udp_client.py: #coding=utf-8 import socketdef ma ...

  6. Android Wear开发 - 数据通讯 - 第二节 : 数据的发送与接收

    本节由介绍3种数据的发送接收: 1.Data Items : 比特类型数据,限制100KB以内 2.Assets : 资源类型数据,大小无上限 3.Message : 发送消息,触发指令 http:/ ...

  7. ZigBee组网机制以及数据的发送和接收

    Zigbee是一种新型的短距离无线通信技术.其特点是低功耗,低成本,组网灵活.Zigbee协议由zigbee联盟指定,包括应用层,和网络层,其下层采用IEEE802.15.4协议. 无论是学习zigb ...

  8. java-UDP协议实现数据的发送和接收

    实现发送端 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; im ...

  9. 关于串口数据的发送和接收(调试必备)

    前言 对于串口的数据发送和接收,大多是都是利用串口中断来进行的,但是这样对于编程方面有一定要求,并且程序也不太好写,比如说,如果让你随意接收一段数据,然后利用串口将它发送出来,第一个需要考虑的问题就是 ...

  10. 教学5层网络体系结构——分层之后数据的发送和接收

    协议分层后数据发送过程 发送方层层封装 接收方层层解封装 唯一加尾部的是数据链路层 思考 发送方某层封装完如何知道该交给哪个下层封装? 应用层选择传输层由应用程序决定,传输层选择网络层由固定的搭配,例 ...

最新文章

  1. HDU1878(判断一个无向图是否存在欧拉回路)
  2. 「每天一道面试题」下面的代码有问题吗?为什么?
  3. 关于个别网段上网时断时续的问题解决
  4. mybaits十七:使用foreach标签
  5. MemoryStream类
  6. Event Bus 设计模式学习笔记
  7. LVM基本应用 扩展及缩减实现
  8. 选择Windows CE wince嵌入式操作系统 的十大理由
  9. 我的世界工业服务器透视修改,教程/透视镜 - Minecraft Wiki,最详细的官方我的世界百科...
  10. Java基础教程【第二章:Java数据类型和变量】
  11. UVa 483 - Word Scramble
  12. php smarty 翻译标签,Smarty自定义block标签
  13. 纯js制作的XML在线编辑器(支持修改本地文件)
  14. 【转】使用chrome插件Page Monitor监控网页内容变化
  15. 三国演义人物词频统计 -- Python
  16. JavaScript按住鼠标左键选中元素, 实现框选(Rubberband)效果
  17. java中的steam流
  18. RFSoC应用笔记 - RF数据转换器 -04- RFSoC关键配置之RF-ADC内部解析(二)
  19. 系统架构设计基础(一)
  20. 音视频入门系列-服务器篇(nginx-rtmp 的部署)

热门文章

  1. html未点击背景 点击背景,vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)...
  2. python 虚拟环境 windows_Python虚拟环境(Windows版)
  3. python sleep 毫秒_如何在python中休眠Webdriver毫秒
  4. python玩转单片机_Python玩转单片机:从基础到进阶,几款主流的开发板大盘点!...
  5. ip地址在c语言中长度是多少_c语言中(++i)+(++i)+(++i)究竟等于多少?
  6. java spark命令行执行参数
  7. dlp型3d打印机_创想三维一台3d打印机是多少钱
  8. java重构三部曲,建构·解构·重构——漫谈批注式阅读三部曲
  9. 华为mate20云备份恢复卡住了_注意了!包括华为、荣耀在内的14款老机型开启EMUI11公测了...
  10. .net 怎么在控制器action中返回一个试图_ASP.NET Core MVC/WebAPI中另辟蹊径的全局统一异常处理方式...