socket 缓存区大小问题,高手求进

姑苏一梦 姑苏一梦 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include "header.h"

#define MAXBUF 1024
typedef struct sockaddr SA;

int main(void)
{
int socketfd,socketfd_server;
struct sockaddr_in serveraddr,clientaddr;
char buffer[MAXBUF];
socklen_t addrlen;
int n;

if((socketfd=socket(AF_INET,SOCK_STREAM,0)) == -1)
{
perror("socket fail");
exit(-1);
}

memset(&serveraddr,0,sizeof(serveraddr));
serveraddr.sin_family=AF_INET;
serveraddr.sin_port=htons(8000);
serveraddr.sin_addr.s_addr=inet_addr("127.0.0.1");

if(bind(socketfd,(SA *)&serveraddr,sizeof(serveraddr)) == -1)
{
perror("bind fail");
exit(-1);
}
if(listen(socketfd,10) == -1)
{
perror("listen fail");
exit(-1);
}
addrlen = sizeof(clientaddr);
if((socketfd_server=accept(socketfd,(SA *)&clientaddr,&addrlen)) == -1) //接收到客户端的消息
{
perror("accept fail");
exit(-1);
}
printf("a new connection :%d\n",socketfd_server); //打印socket连接套接字

int s_length;
int opt_l = sizeof s_length;

getsockopt(socketfd_server,SOL_SOCKET,SO_RCVBUF,&s_length,(socklen_t *)&opt_l); //输出接收缓冲区大小
printf("recv buffer = %d\n",s_length);

sleep(3000);
exit(0);
}





#include "header.h" 

#define MAXBUF 32768
typedef struct sockaddr SA;

int main()
{
int socketfd;
char client_buffer[MAXBUF];
struct sockaddr_in serveraddr,clientaddr;


if((socketfd=socket(AF_INET,SOCK_STREAM,0)) == -1) //调用TCP接口,创建套接字
{
perror("socket fail");
exit(-1);
}

serveraddr.sin_family=AF_INET;
serveraddr.sin_port=htons(8000);
serveraddr.sin_addr.s_addr=inet_addr("127.0.0.1");

if(connect(socketfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr)) == -1) //连接服务器套接字 connect()
{
perror("connect fail");
exit(-1);
}

int s_length;
socklen_t optl = sizeof s_length;

getsockopt(socketfd,SOL_SOCKET,SO_SNDBUF,&s_length,&optl); //获得连接套接字发送端缓冲区的信息
printf("send buffer = %d\n",s_length); // 发送缓冲区的大小

getsockopt(socketfd,SOL_SOCKET,SO_RCVBUF,&s_length,&optl); //获得连接套接字的接收端的缓冲区信息
printf("recv buffer = %d\n",s_length); //打印接收端缓冲区大小

int i = 0;
int sum = 0;
while(1){
memset(client_buffer,'\0',sizeof(client_buffer)); //清空缓冲区的数据
sprintf(client_buffer,"the message is %d\n",i++);
if(write(socketfd,client_buffer,MAXBUF) < 0) //写入缓冲区
{
perror("write fail");
exit(-1);
}

sum += MAXBUF;
printf("sum = %d\n",sum);
}

close(socketfd);
}


运行后的结果为:
客户端:
服务端:

由运行结果知道:我的socket 发送端缓冲区大小:170840
接收端缓冲区大小:87380

可为什么:170840+87380 远小于 391216?
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
姑苏一梦
C语言 70,040 成员 243,237 内容