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..
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