struct sockaddr_in sin1; struct timeval to; int i,tmp; char *pRec; HANDLE hBuffer; // Socket timeout 3 sec to.tv_sec = 3; to.tv_usec = 0; setsockopt( s, SOL_SOCKET, SO_SNDTIMEO, &to, sizeof( to ) ); setsockopt( s, SOL_SOCKET, SO_RCVTIMEO, &to, sizeof( to ) ); for(;;) { tmp = sizeof( sin1 ); i = (int)recvncfrom( s, (void **)&pRec, 0, (PSA)&sin1, &tmp, &hBuffer ); NandPageRead(blkNum, pageNum, &pdbuf[0]); // Read NAND if( i >= 0 ) { vSum = pdbuf[2047]*128+pdbuf[2046]; i=vSum-14; // length of sent data sendto( s, pdbuf+14, i, 0, (PSA)&sin1, sizeof(sin1) ); recvncfree( hBuffer ); } else break; } 把这段代码每句解读一下
时间: 2024-02-14 21:36:12 浏览: 18
这段代码主要是一个接收和发送UDP数据包的循环,下面是每句话的解读:
1. `struct sockaddr_in sin1;` 声明了一个 `sockaddr_in` 结构体类型的变量 `sin1`,表示一个IPv4套接字地址。
2. `struct timeval to;` 声明了一个 `timeval` 结构体类型的变量 `to`,表示超时时间。
3. `int i,tmp;` 声明了两个 `int` 类型的变量 `i` 和 `tmp`,用于存储接收或发送的数据量。
4. `char *pRec;` 声明了一个 `char` 指针类型的变量 `pRec`,用于指向接收到的数据。
5. `HANDLE hBuffer;` 声明了一个 `HANDLE` 类型的变量 `hBuffer`,用于存储接收到的数据缓冲区的句柄。
6. `to.tv_sec = 3;` 设置超时时间为 3 秒。
7. `to.tv_usec = 0;` 设置微秒部分为 0。
8. `setsockopt( s, SOL_SOCKET, SO_SNDTIMEO, &to, sizeof( to ) );` 设置套接字 `s` 的发送超时时间为 `to`。
9. `setsockopt( s, SOL_SOCKET, SO_RCVTIMEO, &to, sizeof( to ) );` 设置套接字 `s` 的接收超时时间为 `to`。
10. `for(;;)` 循环开始。
11. `tmp = sizeof( sin1 );` 设置 `tmp` 的值为 `sin1` 的大小。
12. `i = (int)recvncfrom( s, (void **)&pRec, 0, (PSA)&sin1, &tmp, &hBuffer );` 接收 `s` 套接字中的数据,并将接收到的数据存储在 `pRec` 指向的缓冲区中,返回值存储在变量 `i` 中。
13. `NandPageRead(blkNum, pageNum, &pdbuf[0]);` 从NAND中读取数据,存储在 `pdbuf` 数组中。
14. `if( i >= 0 )` 如果接收到的数据量大于等于 0。
15. `{` 循环体开始。
16. `vSum = pdbuf[2047]*128+pdbuf[2046];` 计算接收到的数据的长度。
17. `i=vSum-14;` 计算需要发送的数据的长度。
18. `sendto( s, pdbuf+14, i, 0, (PSA)&sin1, sizeof(sin1) );` 发送 `pdbuf+14` 中的数据,长度为 `i`。
19. `recvncfree( hBuffer );` 释放接收缓冲区的句柄。
20. `}` 循环体结束。
21. `else` 如果接收到的数据量小于 0。
22. `break;` 跳出循环。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)