美文网首页
7.socket数据的接收和发送

7.socket数据的接收和发送

作者: d20cdad48d2e | 来源:发表于2017-06-11 18:30 被阅读63次

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);

相关文章

  • 7.socket数据的接收和发送

    Linux下数据的接收和发送 Linux 不区分套接字文件和普通文件,使用 write() 可以向套接字中写入数据...

  • socket之send和recv的原理剖析

    不管是send还是recv都不是直接收到对方的数据和发送数据给对方, 发送数据会写入到发送缓存区,接收数据...

  • udp

    发送 接收 接受需要绑定端口,用来接收,,,,,,发送方端口可以和接收方不同 recvform在数据没有到来的时候...

  • Activity向Fragment传值

    发送数据 接收数据

  • 蓝牙发送数据和接收数据

    蓝牙通信代码片段记录 OpenBleHelper.java HexDump.java

  • 3 发送和接收数据

    3.1信息和编码 通过套接字进行发送和接收时,只能处理字节和字节数组。作为一种强类型语言,Java需要把其他数据类...

  • udp工具类

    最近在做车联网使用UDP和车载端进行数据交互,网上找了很多UDP数据发送和接收的居然都不成功,(可发送接收不到数据...

  • ReactNative数据的发送和接收

    Android原生会用到广播,接口,回调等方法来实现发送和接受通知以及通信。React Native也有一套自己的...

  • 10月12日C++学习总结

    今天学习了发送与接收流式数据、进程和线程、工作线程、线程的终止、MFC下多线程的同步机制、 发送与接收流式数据:...

  • 深入理解 Socket 缓冲区

    网络编程离不开 Socket,Socket 就是发送和接收网络数据,Socket 有发送缓冲也有接收缓冲,这些缓冲...

网友评论

      本文标题:7.socket数据的接收和发送

      本文链接:https://www.haomeiwen.com/subject/yslhqxtx.html