|
利用Labwindow CVI实现A机与B机的TCP通信,A机是ARM-Linux开发板,作为Client端,Labwindows CVI上运行的是TCP Server端。客户端的每个数据包的大小是1024个字(4K),客户端开始发送数据包与停止发送数据包都是由服务器端发送命令来控制的,例如:客户端接收到服务器端发送数据包命令时,就开始发送,直到接收到停止命令才停止发送数据包。遇到的问题是:数据传输过程会丢数据,而且不是整个包的丢,丢数据的位置没规律。接收数据代码如下:
- DWORD WINAPI ThreadFunction1_ch2(LPVOID param)
- {
- int messageSize = PACKET_SIZE; //一个包的数据量1024个字
- int wordsToRead;
- int wordsRead;
- ch2_ptr = ch2_buf1;
-
- while(startflag == 1)
- {
- wordsToRead = messageSize;
- while(ch2_hconversation == 0); //等待连接
- while(wordsToRead > 0) //接收一个数据包
- {
- wordsRead = ServerTCPRead(ch2_hconversation,&ch2_ptr[messageSize - wordsToRead],wordsToRead * sizeof(int),1000)/sizeof(int); //ServerTCPRead返回值是读取数据byte数
- wordsToRead -= wordsRead;
- }
- ch2_ptr += PACKET_SIZE; //ch2_ptr是unsigned int指针变量, ch2_ptr + PACKET_SIZE表示的就是在ch2_ptr所指对象地址的基础上加上PACKET_SIZE*sizeof(unsigned int)
- receive_count_ch2++;
- if(receive_count_ch2 == PACKET_NUM)
- {
- receive_count_ch2 = 0;
- if(ch2_ptr == receive2_buf1_end)
- ch2_ptr = ch2_buf2;
- else
- ch2_ptr = ch2_buf1;
- ReleaseSemaphore(Semaphore_handle2,1,NULL); //信号量计数值加1,使得ThreadFunction2_ch1完成ch1_buf1的数据写入文本文件
- }
- }
- return 0;
- }
复制代码 我感觉是读数据时数据量设置太大了,可能超过了TCP Server端数据缓存区大小。
wordsRead = ServerTCPRead(ch2_hconversation,&ch2_ptr[messageSize - wordsToRead],wordsToRead * sizeof(int),1000)/sizeof(int); //ServerTCPRead返回值是读取数据byte数
一次读取一个包,1024个字,不知道有没有人遇到了类似的问题?
|
|