Solved

Question about CAsyncSocket!

Posted on 2001-06-21
9
593 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

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

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

If you use Adobe Reader X it is possible you can't open OLE PDF documents in the standard. The reason is the 'save box mode' in adobe reader X. Many people think the protected Mode of adobe reader x is only to stop the write access. But this fe…
Have you tried to learn about Unicode, UTF-8, and multibyte text encoding and all the articles are just too "academic" or too technical? This article aims to make the whole topic easy for just about anyone to understand.
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.
This is my first video review of Microsoft Bookings, I will be doing a part two with a bit more information, but wanted to get this out to you folks.

632 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