Kei wrote: > Hi Everyone > > I've solved this problem.. what I do is make a count of "How many bytes > remaining". Everytime the value returned by Receive() will be subtracted > from the "BytesRemaining". When OnDataAvailable is repeatedly called, a > buffer is kept being ReAlloc()'ed . When "ByteRemaining" reaches zero, > then a WriteFile will be performed, so that the buffer is written to > disk..
Do you allocate memory up to the size of data the client intends to send? That would be a huge waste of memory and won't work upon large data. Instead receive into a buffer of let's say 8 kb and write it to your stream at once, receive next chunk and so on. You don't have to take care of packet size, it's something on a lower layer encapsulated by winsock. --- Arno Garrels [TeamICS] > Thanks! > > David > > Wilfried Mestdagh wrote: > >> Hello David, >> >> >> >>> How do I know the maximum size possible? >>> >>> >> >> at receiving side, specially depending on the speed of your own program >> you mostly never get above 8 kb. However I have seen receiving packets >> 10 time as high. But you dont have to care mutch, if you receive not >> all, then OnDataAvailable is immediatly called again, meaning if you >> have a temporary buffer that is to small, however if you receive on the >> stack then you can make him (almost) as large you wants. >> >> >> >>> I certainly don't want to malloc 100KB for a TCP packet... >>> >>> >> >> See above, you dont need to. >> >> --- >> Rgds, Wilfried [TeamICS] >> http://www.overbyte.be/eng/overbyte/teamics.html >> http://www.mestdagh.biz >> >> Saturday, October 29, 2005, 20:25, Kei wrote: >> >> >> >>> Hi! >>> >>> >> >> >> >>> I think I'm going to accept the reality that... TCP packets are splitted >>> into arbitrary sizes.. but!!! >>> How do I know the maximum size possible? What is the maximum size that a >>> packet can be? I certainly don't want to malloc 100KB for a TCP >>> packet... >>> >>> >> >> >> >>> Thanks! >>> >>> >> >> >> >>> David >>> >>> >> >> >> >>> Wilfried Mestdagh wrote: >>> >>> >> >> >> >>>> Hello David, >>>> >>>> >>>> >>>> >>>> >>>>> Hi! I'm new to ICS! >>>>> >>>>> >>>>> >>>>> >>>> Welcome to the group :) >>>> >>>> >>>> >>>> >>>> >>>>> A->>B: msg hello >>>>> B->>A: msg yo! how's it going? >>>>> >>>>> >>>>> >>>>> >>>> Yes that's the way to go. Design a user made proto for what you intend >>>> to do. >>>> >>>> >>>> >>>> >>>> >>>>> If A is larger than the default buffer size (256 chars) then the A >>>>> (sender) will warn B in advance >>>>> >>>>> >>>>> >>>>> >>>> You can do that, but is not nececary. Also you will maybe have a very >>>> mutch allocation / deallocation of memory and you can eventually end up >>>> with fragmented memory where you have not a nice large block in it at >>>> the moment you need it. But it can work, just think over carefully. A >>>> better idea is often to make a receive buffer that grows automatically >>>> if (and only if) needed, and then just reuse that buffer over and over >>>> again. Then you have some (re)allocation in begin but then stable. >>>> >>>> >>>> >>>> >>>> >>>>> TWSocket will automatically split it into packets, >>>>> >>>>> >>>>> >>>>> >>>> Winsock will split in packets as large as the MTU (around 1500 bytes). >>>> Eventually data can (and will if high speed) arrive as 1 large packet >>>> but not necacarely. >>>> >>>> >>>> >>>> >>>> >>>>> I really want the sender side to send the 1MB file all at once, since >>>>> I do the FileWrite() right after Receive().... >>>>> >>>>> >>>>> >>>>> >>>> No you cannot. Winsock does not respect packet boundaries, but (see >>>> prior paragraph) there are no megabytes TCP packets. >>>> >>>> You have to receive all data chuncks into a buffer, and when you >>>> received them all then you save to file (or save every packet direct to >>>> disk). There is no problem to know the moment of close the file because >>>> you know the length of the data from your protocol. >>>> >>>> --- >>>> Rgds, Wilfried [TeamICS] >>>> http://www.overbyte.be/eng/overbyte/teamics.html >>>> http://www.mestdagh.biz >>>> >>>> Saturday, October 29, 2005, 11:01, Kei wrote: >>>> >>>> >>>> >>>> >>>> >>>>> Hi! I'm new to ICS! >>>>> >>>>> >>>>> >>>>> >>>> >>>> >>>> >>>> >>>>> I am designing a simple protocol that will be mainly used locally (as >>>>> a database server backend)..so I'm guessing I could send up to 2GB of >>>>> stuff without hassle (BLOBs, for example). Right now I'm just >>>>> experimenting with the facility for two parties to effectively "talk" >>>>> to each other, even with long long messages, and with binary data >>>>> transfer. For example, for sending a message, the command is "msg >>>>> [text]" >>>>> >>>>> >>>>> >>>>> >>>> A->>B: msg hello >>>> B->>A: msg yo! how's it going? >>>> >>>> >>>> >>>> >>>> >>>>> If A is larger than the default buffer size (256 chars) then the A >>>>> (sender) will warn B in advance, like this: "hey! I'm gonna send you >>>>> 10000 bytes of text" >>>>> >>>>> >>>>> >>>>> >>>> A->>B: longmsg 10000 >>>> B->>A: ready msg >>>> A->>B: msg blahblahblah...........blah! >>>> >>>> >>>> >>>> >>>> >>>>> In this case, B will be notified of the text size, then when >>>>> OnClientDataAvailable() event comes, it will malloc a bigger buffer, >>>>> then Receive(CustomSized_Buffer, SizeHeToldMe). Similarly Im >>>>> considering the same mechanism to send binary data. But if the file >>>>> is slightly >>>>> >>>>> >>>>> >>>>> >>>> larger (>>10KB) then TWSocket will automatically split it into packets, >>>> >>>> >>>> >>>> >>>>> which I don't want it to do: >>>>> >>>>> >>>>> >>>>> >>>> A->>B: upload 1048576 picture.jpg >>>> B->>A: ready upload >>>> A->>B: 01001010101010.. (10720 bytes) >>>> A->>B: 11111010101012.. (10720 bytes) >>>> >>>> >>>> >>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> >>>> A->>B: 01001010101010.. (4023 bytes) >>>> >>>> >>>> >>>> >>>> >>>>> I really want the sender side to send the 1MB file all at once, since >>>>> I do the FileWrite() right after Receive().... >>>>> >>>>> >>>>> >>>>> >>>> >>>> >>>> >>>> >>>>> Could anybody please help me on this issue? >>>>> >>>>> >>>>> >>>>> >>>> >>>> >>>> >>>> >>>>> Thanks! >>>>> >>>>> >>>>> >>>>> >>>> >>>> >>>> >>>> >>>>> David -- To unsubscribe or change your settings for TWSocket mailing list please goto http://www.elists.org/mailman/listinfo/twsocket Visit our website at http://www.overbyte.be