SOCKEt编程,局域网内,小弟我每次发送500KB行不
SOCKEt编程,局域网内,我每次发送500KB行不?
send()每次发送500KB,我看了send的返回值。也是500KB(换算了一下)!
但是我收到的PDF,MP3等文件,接收后打不开,无效!
怎么回事?
------解决方案--------------------
肯定是读写文件的时候除了问题。
我前两天还被这个搞得焦头烂额。。。。
需要注意的就是
send()每次发送500KB,我看了send的返回值。也是500KB(换算了一下)!
但是我收到的PDF,MP3等文件,接收后打不开,无效!
怎么回事?
------解决方案--------------------
肯定是读写文件的时候除了问题。
我前两天还被这个搞得焦头烂额。。。。
需要注意的就是
- C/C++ code
// 发送端 ReadFile( hFile, buffer, sizeof(buffer), &dwBytesRead, NULL); send( client, buffer, dwBytesRead, 0); //dwBytesRead一定要作为发送的字节数 //接收端 int nRecv = recv( s, buffer, sizeof(buffer), 0 ); WriteFile( hFile, buffer, nRecv, &dwBytesWriten, NULL ); //nRecv一定要作为写文件的字节数
------解决方案--------------------
for(i=0;i<40000;j++,i++) //逗号运算符是以第二个值为整个表达式的值
{
if(j==pDlg->m_FileCliHead.FileLength)
{
break;
}
SubSection[i]=pDlg->m_FileContent[j];
}
//select(0,0,&SendFile_Fd,0,0);
static int Send_byte=send(WirteSock.fd_array[0],(const char*)&SubSection,sizeof(SubSection),0);
每次发送都是4000,但你数组中数据可能没有那么多。这可能会有点问题。
------解决方案--------------------
send完了后判断一下返回值,看看实际发送的数据是不是你想发送的
如果实际发送的少于想发送的,那么在下次获取数据的时候需要特殊处理一下,防止漏发数据
------解决方案--------------------
你的发送没问题,可以发送的,问题出在接收部分