RecvBuffer()

.pEnd1,指示要比较的字符,nLen1是其长度。
  m= m_nRecv-nLen1, 字符不需要比较的个数
  第一个for死循环中,的,最里面的一个if,中,n=0;不是必须的。
    break;会使里层循重新开始,n自然归位。下面的if中,是要求n与nLen1的相等性判断。上个循不的提前中止,定使其下的判断不成立。
    m_nNext,在接收到的字符缓冲中,指缓冲区中,可用位置的第一个位置。
    m_nRecv为什么要被重新赋值。意味着只承认到要比较的字符结束处为止的字符串。
所读到的后面的字符被舍弃。
 NextBuffer()主要用于处理,m_nRecv索引的接收缓冲。
    就是清空m_bufRecv[]接收队列中缓冲的所有数据。
    可认为是个清空数组函数。


RecvBuffer()本质上是一个简单的模式匹配算法。

第一次循环总是试图匹配空的字串,因为,数据还没从串口读到。

其返回值1总是代表匹配成功。

同时,会适时检查一个计数变量是否会超过150次,此变量为dwTime,但没有指示任何有关时间的信息。

它会调用一个子函数,Recv(),用于从设备端口中读取指定长度的数据。

该RecvBuffer()非常依赖其它函数对相关共享变量的设置。SendBuffer(), NextBuffer(),m_bufRecv[m_bufRecv], m_nRecv, m_nNext等。

大量相关的函数,离散的变量,使相关函数理解、维护起来非常困难。这根本不是C++程序,而是设计惨不忍睹的C面条。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
翻译这段代码并在每一行后进行注释int ret,listen_fd, client_fd; struct sockaddr_in server_addr, client_addr; socklen_t slen, clen = sizeof(client_addr); char recvBuffer[128] = {0}; char recCmd[128] = {0}; const int on = 1; listen_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(listen_fd < 0) { printf("server socket failed\n"); exit(1); } server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SERVERPT); server_addr.sin_addr.s_addr = htons(INADDR_ANY); slen = sizeof(server_addr); //绑定网络设备 setsockopt(listen_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)); ret = bind(listen_fd, (struct sockaddr *)&server_addr, slen); if(ret < 0) { printf("listen_fd bind failed\n"); exit(1); } ret = listen(listen_fd, 8); if(ret < 0) { printf("server listen failed\n"); exit(2); } //开始侦听客户端的连接请求 printf("Waiting connect.....\n"); client_fd = accept(listen_fd, (struct sockaddr *)&client_addr, (socklen_t *)&clen); if(client_fd < 0) { printf("server accept failed\n"); exit(3); } //连接成功,打印客户端的网卡信息 printf("client port: %d ,", ntohs(client_addr.sin_port)); printf("client ip: %s\n",inet_ntoa(client_addr.sin_addr)); while(1) { printf("Waiting recv.....\n"); ret = read(client_fd, recvBuffer, 128); if(ret < 0) printf("read failed\n"); else if(ret == 0) { //客户端下线 close(client_fd); break; } else { //打印接收到客户端信息 printf("client data: %s\n", recvBuffer); //给客户端回发信息 write(client_fd, "Successfully received your message!", 128); } }
06-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值