to larryuan:
>ServerSocket.Socket.Connections是指与当前各个客户端的连接,我是说比如某一个
>客户端向服务器在发一个文件的同时又发了一个消息,会冲突吗?
说实在的,这个问题我考虑过,但是如果是自己做的客户端,这个问题是可以绕过去的。只要你在写程序的时候避免这种可能性就行了。
其实我个人认为第二种方法是比较好的。其实你说的问题解决起来并不麻烦,因为你可以在传送的CMD中夹带文件的长度信息。
关于1.可以用Socket的Handle或者Addr判断是从哪里传送的信息。
关于3.A.packed的作用是压缩record所占用的内存空间(我的理解)
B.根据我的经验,这样的结构占用的内存空间是以最大的为准(8 + 1024 byte)。如果你用netdata.msg,取出的就是前128byte,如果是netdata.file,取出的就是整个1024byte。可能表达的不是很清楚。
区分integer的值可以这样定义:
netdata = record
cmd : array[0..7] of byte;
case packagetype: integer of
1: (msg : array[0..127] of byte);
2: (file : array[0..1023] of byte);
end;
C.好像是不可以的。
D.是。
E.可以。
to PoolD:
由于C和D的原因,我还是决定放弃3。不过我还是在问问B:
你的意思是说,在赋netdata.msg or netdata.file前,要先赋netdata.packagetype=1 or 2
在使用的时候,检查netdata.packagetype的值来判断用netdata.msg还是netdata.file
不知道我理解的对吗?
继续1。通过socket.remoteaddress可以判断出数据是来自B的,但如何处理它呢?把它丢掉,
还是先临时存起来?
继续2。虽然可以加入文件长度信息,还是无法避免开始说的那个问题,比如服务器正接收
来自A的文件,此时B发来一个5K的消息,它掺在A的文件中,那么A的文件就少了后5K的内容了。