Solved

Question about CAsyncSocket!

Posted on 2001-06-21
9
504 Views
Last Modified: 2013-11-20
Hi All,

I am writing an client/server application , and i am trying to use CAsyncSocket to send message between them. However, I have encounter a problem is that: when i send message from either client or server to the other, for example:

send(socket, "1");
send(socket, "2");

and on the other side, it will receive "12" for once.

How can i avoid this situation???

Thanks in advance.

0
Comment
Question by:hoandrew
  • 3
  • 2
  • 2
  • +2
9 Comments
 
LVL 9

Expert Comment

by:ShaunWilde
ID: 6217453
try using TCP_NODELAY with SetSockOpt that will disable the NAGLE algorithm
0
 
LVL 9

Expert Comment

by:ShaunWilde
ID: 6217469
BOOL bDisable=TRUE;
setsockopt(mysocket, IPPROTO_TCP, TCP_NODELAY, &bDisable, 4)
   
0
 
LVL 9

Expert Comment

by:ShaunWilde
ID: 6217471
you might also think about breaking your message up with headers to determine length etc
0
 
LVL 32

Expert Comment

by:jhance
ID: 6217802
Why shouldn't it receive "12"??  That's EXACTLY what you sent!!  Think of the socket connection as a stream.  Every call to send puts the data referenced by send into the stream in order and all of it will end up at the receiver.  Any formatting or interpretation of the stream is up to you.  If you want to keep the "1" and "2" separate, then it's up to you to put in some way of knowing that the first message is ended and the second one is starting.
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 32

Expert Comment

by:jhance
ID: 6217803
BTW, printf is the same say.  You'd never know where the lines broke if you didn't put a "\n" in the stream from time to time to format the text.
0
 
LVL 10

Expert Comment

by:makerp
ID: 6217886
read one byte at a time at the other end, then youll get "1" then "2".
0
 
LVL 10

Expert Comment

by:makerp
ID: 6217888
read one byte at a time at the other end, then youll get "1" then "2".
0
 
LVL 8

Accepted Solution

by:
VinExpert earned 100 total points
ID: 6222511
Hi,

Socket is working perfectly alright in that case. U will get "12" only as u r sending both successively.
I suggest to define ur own protocol for communication in that case. Define a datatype of ur own, it may be just a structure. Then after reading the socket, go on mapping the character buffer to ur structure, in that way u can seperate. Say in Ur case
struct MyData
{
char chTemp;
};

While reading the data
1. Read to temporary character buffer
2. copy the character buffer contents to structure and repeat this till temporary buffer is finished.
Then u will get exactly what u have sent. Remember, while sending also u have to fill the same structure and send it, rather than sending the hard coded bytes!!!

Try it out.
VinExpert
0
 
LVL 23

Expert Comment

by:Roshan Davis
ID: 9490037
No comment has been added lately, so it's time to clean up this TA.
I will leave a recommendation in the Cleanup topic area that this question is:

Answered by : VinExpert

Please leave any comments here within the next seven days.

PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!

Roshan Davis
EE Cleanup Volunteer
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
not able to insert into temp table 68 150
unable to delete all specified values regedit 38 149
sum67 challenge 35 89
firstChar challenge 13 83
Introduction: Finishing the grid – keyboard support for arrow keys to manoeuvre, entering the numbers.  The PreTranslateMessage function is to be used to intercept and respond to keyboard events. Continuing from the fourth article about sudoku. …
Introduction: Hints for the grid button.  Nested classes, templated collections.  Squash that darned bug! Continuing from the sixth article about sudoku.   Open the project in visual studio. First we will finish with the SUD_SETVALUE messa…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

708 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now