我现在想用一对socket传送两种数据包,一种为小数据包,一种为大的文件数据包。
小数据包比较频繁,要求实时强,大文件数据包有分包再组合成文件。有可能两种包同时交叉传送。现在问题是在服务器端怎样识别两种不同的包,大数据又怎样组合。不知大家有没有好的方法与见意。
小数据包比较频繁,要求实时强,大文件数据包有分包再组合成文件。有可能两种包同时交叉传送。现在问题是在服务器端怎样识别两种不同的包,大数据又怎样组合。不知大家有没有好的方法与见意。
解决方案 »
- delphi7 连接mysql5.x问题
- 求dephi打印程序?
- 如何在非窗口内检测键盘事件
- file not found 'ppBands.dcu'是什么问题?
- 请教一个小问题,DBEdit的exit事件中,如何判断text是否改变了?
- 停电,正写代码呢,再打开delphi7,编写的原程序出错,打不开了,而且出乱码,怎么办呀。
- Win2000+Delphi6+ExpressGrid4写的程序在Win200和XP下都能正常运行,但在98下一运行就非法操作?
- dephi中的数据查询
- 欢迎大家下载我的软件,下载者有分.
- 谢谢大家一直的帮助,现要走开一会真是舍不得啦!其实我的心从不曾离去!唯以这个小问题:“如何制作数据库字典编辑器?”向大家问个好,也帮提一下!263~~~
- 火箭两连胜.....散分100.....
- 升级
cmdLargePacket=10002;
报文发送的时候:
类型,报文长度,报文内容 的结构。这样服务器就能够解析了。
SamllPack=record
....
end;
LargePack=record
....
end;
SmallPack我就直接发送,每次都是一个或多个完整的包,但LargePack要多个才组合成一个文件。
我是想问在客户端怎样识别不同的包从而接收呢,跟居包的大小吗?但如果是两种包的最小公倍数呢?
在服务器端接收时是用socket.ReceiveBuf(SamllPackbuf,sizeof(SmallPack))还是Socket.ReceiveBuff(LargePackbuf,Sizeof(LargePack))呢怎样正确判断。
我是要先知道来的是什么报文,才能正确接收啊。现在就是要在接收包前就要判断是什么报文,然后用正确的包去接收。
------------------在线等待------------------------
iNo:integer;///////标记是第几包
....
end;
我不知你所说的在服务器接收端是不是这样:
while Socket.ReceiveLenth>0 do
begin
Socket.ReceiveBuf(flag,8);
if flag=小包 then
begin
Socket.ReceiveBuf(SmallPack,sizeof(SmallPack))
.......
end
else begin
Socket.ReceiveBuf(LargePack,Sizeof(LargePack));
合包 .........
end;
end;
我以前是只发送小包的,直接发送,没有发送前面的类型和长度的flag。如果是这样的话,那以前的也要多加一个类型和长度的flag
先发flag包有时会把flag包与后的数据包分开,操成后面的包无法判断,而丢包。我在internet上传文件,一大部分文件无法收到。在句域网上就好一点。
--------------------加紧测试中..........................
type MsgHead=record
MsgType:byte;//1,2分别对应两种不同的报结构类型
end
...............UdpRead:
Adata.ReadBuffer(MsgHead,SizeOf(MsgHead));
if _MsgHead.MsgType=1 then
Adata.ReadBuffer(_struct1Data,SizeOf(Struct1Data);
else if _MsgHead.MsgType=2' then
Adata.ReadBuffer(_struct2Data,SizeOf(Struct2Data);
你用的是D7底下UDP的东西吧,是不是D5底下也有这样类似的东西啊。