TCP server有关缓冲区的问题
//server.cpp
出问题的一段:
//client.cpp
客户端向服务端发送4个包,每个包中发送246988Byte:
然后所得结果:


然后我测了一下ubuntu 18.04的默认缓冲区是87380Byte,然后就想知道这个为什么是1062000?
出问题的一段:
printf("==========waiting for client's request==========\n");
if ((acceptfd = accept(listenfd, (struct sockaddr*)NULL, NULL)) == -1) {
printf("accept socket error: %s(errno: %d)\n", strerror(errno), errno);
}
else
{
printf("accept sucess\n");
int rcvbuf_len = 0;
socklen_t len = sizeof(rcvbuf_len);
if (getsockopt(acceptfd, SOL_SOCKET, SO_RCVBUF, &rcvbuf_len, &len) < 0) {
perror("getsockopt: ");
}
printf("the recv buf len: %d\n", rcvbuf_len);
}
char recvmsg[246988] = {0};
ssize_t totallen = 0;
while (1) {
sleep(1);
ssize_t readlen = read(acceptfd, recvmsg, sizeof(recvmsg));
printf("readLen: %d\n", readlen);
if (readlen < 0) {
perror("read: ");
return -1;
}
else if (readlen == 0) {
printf("read finish: len = % ld\n", totallen);
close(acceptfd);
return 0;
}
else
{
totallen += readlen;
}
}
//client.cpp
客户端向服务端发送4个包,每个包中发送246988Byte:
ssize_t writelen;
char sendmsg[246988] = {0};
int count = 0;
while (1)
{
++count;
if (count == 5) {
return 0;
}
writelen = write(connfd, sendmsg, sizeof(sendmsg));
if (writelen < 0) {
printf("write error\n");
close(connfd);
return 0;
}
else
{
printf("write success, writelen: %d\n", writelen);
}
}然后所得结果:


然后我测了一下ubuntu 18.04的默认缓冲区是87380Byte,然后就想知道这个为什么是1062000?
...全文
相关推荐
TCP粘包问题浅析及其解决方案.docx
在实践中,我们可以使用规定消息头,消息体的方式来解决 TCP 的粘包、拆包问题。例如,server 端代码的主要逻辑是接收客户端发送过来的消息,重新组装出消息,并打印出来。
TCP_Server_test.zip_TCP test_tcp server
本文将深入探讨TCP服务器测试及其在多进程环境中的应用,以标题"TCP_Server_test.zip_TCP test_tcp server"和描述"简单TCP客户端应用程序(采用多进程书写)"为基础
Node.js-NodeJs的TCP中的粘包分包问题的解决方案
本文将深入探讨这两个问题及其解决方案。1. **TCP粘包**: TCP为了提高效率,会将多个小的数据包合并成一个大的数据包进行传输,这就是所谓的“粘包”。
QT+TCP通信Server端
下面将详细阐述QT+TCP通信Server端的实现步骤和关键知识点:1.
西门子 s7300 cp343以太网模块实现modbus tcp server 跨网通信说明
DB198用于存放Modbus TCP Server的数据,而DB199和DB200分别作为接收和发送缓冲区。在使用例子程序时,需要将这些程序块复制到用户的程序中,并在组织块OB1中调用FC199。


其它技术问题
