能力值:
( LV9,RANK:375 )
|
-
-
2 楼
自定义一个结构体吧,里面定义好各个字段的大小,例如:
#pragma pack (1)
typedef struct _FileInfo
{
char szFileName[256]; // 文件名
int nFileSize; // 文件大小
................................. // 其他属性
}FileInfo, *pFileInfo;
#pragma pack ()
这样你发送的时候,可以直接用一个指针指向,大小用sizeof(FileInfo)即可
|
能力值:
( LV4,RANK:40 )
|
-
-
3 楼
[QUOTE=hotsauce;1184442]自定义一个结构体吧,里面定义好各个字段的大小,例如:
#pragma pack (1)
typedef struct _FileInfo
{
char szFileName[256]; // 文件名
int nFileSize; ...[/QUOTE]
额。直接定义结构体? 那接收端怎么区分呢?难道直接接收进结构体? 但是数据肯定不会自动区分了。
|
能力值:
( LV9,RANK:375 )
|
-
-
4 楼
双方肯定采用统一定义的数据结构啊,你接收到的数据是应该是什么格式肯定是清楚的,按照格式去解析,并添加相应判断就行了
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
结构体是个不错的建议
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
肯定是直接定义结构体啊。直接发。 不过需要注意一下 内存对齐的问题。
|
能力值:
( LV4,RANK:40 )
|
-
-
7 楼
可是我直接发送,,接收会有问题呀。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
utf8+xml完破任意信息的封包
|
能力值:
( LV4,RANK:40 )
|
-
-
9 楼
我源码发给您看一下吧。
----------------------发送端源码
hFile=CreateFile(FilePath,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); //打开文件
int FileSize=GetFileSize(hFile,NULL); //获取文件大小
CString FileName="";
FileName=FilePath.Right(FilePath.GetLength()-FilePath.ReverseFind('\\')-1); //得到文件名
//lpFile->FileName=FileName.GetBuffer(1);
strcpy(lpFile->FileName,FileName.GetBuffer(0));
lpFile->FileSize=FileSize;
FileName.ReleaseBuffer();
if(hFile!=INVALID_HANDLE_VALUE)
{
CopyMemory(buf,lpFile,sizeof(FileInfo));
ret=send(CMDSocket,buf,sizeof(FileInfo),0); //如果打开文件成功,发送文件信息
delete(lpFile);
----------------------接收端源码
memset(lpFile,0,sizeof(FileInfo));
ret=recv(sock,(char *)lpFile,sizeof(FileInfo),0); //先接收文件名
if(ret==SOCKET_ERROR)
{
OutputDebugString("接收文件名失败");
return false;
}
else
{
FileSize=lpFile->FileSize;
int newopt=2000;
ret=setsockopt(sock,SOL_SOCKET,SO_RCVTIMEO,(char *)&newopt,len); ///设置接收超时时间
strcpy(FileName,FileDir);
strcat(FileName,lpFile->FileName);
delete(lpFile);
|
能力值:
( LV4,RANK:40 )
|
-
-
10 楼
真心不太懂。。。
|
能力值:
( LV9,RANK:375 )
|
-
-
11 楼
你的lpfile是个结构指针?
另外CreateFile调用后应该立刻检查返回句柄是否有效,不然后面一些用到句柄的函数调用可能会出问题,一般我自己做封包发送的时候,一般是消息头+消息内容,在消息头中会含有消息的长度指示,这样在接收的时候一方面可以判断消息是否接收完整,另一方面碰到粘包的时候也能够正确分离,不知道这么说是否清楚
|
能力值:
( LV4,RANK:40 )
|
-
-
12 楼
lpFile是结构指针。。
消息头+消息内容。。可以是可以,不过挺麻烦的。
|
|
|