Chinaunix首页 | 论坛 | 博客
  • 博客访问: 349079
  • 博文数量: 60
  • 博客积分: 1570
  • 博客等级: 上尉
  • 技术积分: 620
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-02 23:37
文章分类

全部博文(60)

文章存档

2012年(2)

2010年(2)

2009年(56)

分类: LINUX

2009-11-08 21:58:34

一。函数原型:

#include <sys/socket.h>
ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags);


Returns: number of bytes sent if OK, 1 on error


ssize_t recv(int sockfd, void *buf, size_t nbytes, int flags);


Returns: length of message in bytes, 0 if no messages are available and peer has done an orderly shutdown, or 1 on error

二。(以下假定第四个参数flags为0,同时假定套接字sockfd的发送缓冲的长度足够大)

1.send函数中,第三个参数nbytes:指明实际要发送的数据的字节数。

 例如:char buf[5];

send(sockfd, buf, 10, 0);

尽管buf长度为5个字节,但发送给对端的数据为 &buf[0] 开始之后10个字节,即使这10个字节全部为‘\0’。在接收端,recv函数可以把这10个'\0'全部接收到(当然recv 的buffer>=10)。

2.这个时候,在另一端,recv(sockfd,buf, len, 0);

buf能接收的长度最大为len(包括len)。接收缓冲区中'\0'后面的数据也可以正常接收。

注意,在调用recv前,最好将buf清空, recv函数不会在接收到的数据后面添加结束字符'\0'。

阅读(6233) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~