C语言的socket编程中,send/recv,write/read这两组函数有什么区别?为什么要设置两组功能相似的函数?

RT,什么时候该用哪一组呢?另外,如果可能也请描述一下他们和sendto/recvfrom, sendmsg/recvmsg比较一下。请不要只贴API,API只说怎么用没说有什么区别。

先给个链接http://msdn.microsoft.com/en-us/library/windows/desktop/ms741692(v=vs.85).aspx

Windows下的socket和Linux下的socket是不一样的,我没有查到sendmsg/recvmsg这个方法,上面的链接是一个类似的函数,它和send/recv 的区别是,这个函数可以发送socket控制信息,看API就知道。
另外我也没有看到有write/read函数。 sendto/recvfrom用于UDP链接,send/recv用于TCP链接。
你列举的其余函数,我都没找到。上面的API地址供楼主查询验证。追问

似乎链接是windows的?我是在linux中遇到的。所以说结论还是这样吗?

追答

除了WSA开头的那几个函数,其他的基本和Linux一样,至少名一样。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-08-16
write/read,是关于写特定的文件描述符使用的比较底层的系统调用,
sendto/recvfrom适用于用udp(数据包)方式的套接字中使用的,

其他的没见过,我是学linux编程的追问

确实是在linux中遇到的,那么write/read可以用于socket吗?如果可以的话,为什么还需要有其他那些函数呢?

追答

write/read是系统的底层调用,只要有文件描述符就可以使用这两个函数,套接字主要用于网络,而网络有很多协议,那么针对不同的协议就需要不同的实现,就像tcp和udp就使用不同的操作方式

本回答被提问者采纳

socket编程中write,read和send,recv之间的区别
然后是UDP和TCP两种传输方式的不同。简单说一下。write和read算是流中的知识,不是socket中的知识,主要是向流中读取和写入数据用的方法。而send和receive两个方法就顾名思义就行。就是发送和接收数据,对应的send就是发送端才有的方法,就是为了将数据发出去,而receive就是接收端,接收数据。希望可...

socket编程中write,read和send,recv之间的区别
1、recv和send函数提供了和read和write差不多的功能。但是他们提供了第四个参数来控制读写操作.intrecv(intsockfd,void*buf,intlen,intflags)intsend(intsockfd,void*buf,intlen,intflags)前面的三个参数和read,write相同,第四个参

socket编程中write,read和send,recv之间的区别
write\/read,是关于写特定的文件描述符使用的比较底层的系统调用, sendto\/recvfrom适用于用udp(数据包)方式的套接字中使用的, 其他的没见过,我是学linux编程的

socket编程中write,read和send,recv之间的区别
一旦,我们建立好了tcp连接之后,我们就可以把得到的fd当作文件描述符来使用。由此网络程序里最基本的函数就是read和write函数了。

...从socket写入和读取的函数,read\/write和send\/recv函数的含义并解释其...
没理解楼主意思,楼主可以搜搜IP\/TCP编程模型(socket网络编程),大概就是要有一个sever端和一个client端,read\/write一般是对本地文件的读取\/写入,然后send\/recv是sever端和client端互相发送数据使用的,具体程序网上搜搜这方面吧 我手头没有现成的 希望对你有帮助 ...

linux中read,write和recv,send的区别
区别:1、recv、send只用于套接字通信;2、read、write是底层系统调用,只要是文件操作就都可以用, 比如套接字操作,套接字描述符属于是文件描述符的一种,套接字本身在Linux上就叫做套接字文件。所以read、write函数不光可以用于套接字编程,也可以用于读取其他各种文件,比如用于文件编程读写普通文件...

Socket send函数和recv函数详解
在Socket编程中,send函数用于向TCP连接另一端发送数据。无论客户端或服务器应用程序,均能使用此函数。客户端通常用send向服务器发送请求,而服务器则用它回应客户端。该函数接受套接字描述符、发送数据缓冲区、数据字节数及标志参数作为输入。函数比较要发送的数据长度与套接字的发送缓冲区大小。若大于...

TCP协议之Send和Recv原理及常见问题分析
如果recv在复制时出错,则返回SOCKET_ERROR。如果recv函数在等待协议接收数据时网络中断了,则返回0。 在Unix系统下,如果recv函数在等待协议接收数据时网络断开了,则调用recv的进程会收到一个SIGPIPE信号,进程对此信号的默认处理是终止进程。 send函数的返回值在Unix系统下,如果send、recv、write在等待协议传送数据时,...

recv\/send\/recvfrom\/sendto\/recvmsg\/sendmsg小结
总结网络编程中的recv与send:使用read与write可对套接字进行读写,fd为套接字描述符,write复制buf数据至内核TCP缓冲区,具体数据传输时间由系统控制。write阻塞发生在内核发送缓冲区满时,每个socket具有独立的接收与发送缓冲区。在TCP中,recv与send用于精确控制数据传输,buf与len指定数据位置与大小,...

recv\/send\/recvfrom\/sendto\/recvmsg\/sendmsg小结
UDP读写采用recvfrom和sendto,recvfrom读取数据,接收端socket地址需获取,sendto指定接收端地址。这两个系统调用的flags及返回值与send\/recv函数类似,recvfrom\/sendto用于面向连接socket时,设置最后两个参数为NULL。通用数据读写函数,适用于TCP和UDP,sockfd指定目标socket,msg参数为msghdr结构体指针。msg...

相似回答