Click here to Skip to main content
15,889,096 members
Home / Discussions / .NET (Core and Framework)
   

.NET (Core and Framework)

 
GeneralRefreshing Panel Pin
Kiki999-Mar-05 2:44
Kiki999-Mar-05 2:44 
GeneralRe: Refreshing Panel Pin
Chua Wen Ching9-Mar-05 16:39
Chua Wen Ching9-Mar-05 16:39 
GeneralRe: Refreshing Panel Pin
afinnell22-Mar-05 11:01
afinnell22-Mar-05 11:01 
Generalhelp me!!! Pin
kookoorikoo8-Mar-05 11:09
kookoorikoo8-Mar-05 11:09 
GeneralRe: help me!!! Pin
gnjunge9-Mar-05 0:25
gnjunge9-Mar-05 0:25 
GeneralRe: help me!!! Pin
kookoorikoo9-Mar-05 8:54
kookoorikoo9-Mar-05 8:54 
GeneralRe: help me!!! Pin
Chua Wen Ching9-Mar-05 16:28
Chua Wen Ching9-Mar-05 16:28 
GeneralIAsyncResult : how to check a message is completed Pin
Gian8-Mar-05 5:38
Gian8-Mar-05 5:38 
Hello,
i'm developing a client-server application and now i need to fix my asynchronously receive of messages because sometimes the complete message is not received on a single OnDataReceived call. I've tried for example to send a 18000 bytes long message with a 40000 bytes long receive buffer but there're 2 incoming packets of 13000 and 5000 bytes. My OnDataReceive function is this

<br />
public  void OnDataReceived(IAsyncResult asyn)<br />
{<br />
	try<br />
	{<br />
<br />
		// SocketPacket is a class with the buffer of packet<br />
                SocketPacket socketData = (SocketPacket)asyn.AsyncState ;<br />
<br />
		int iRx  = 0 ;<br />
		// Complete the BeginReceive() asynchronous call by EndReceive() method<br />
		// which will return the number of characters written to the stream <br />
		// by the client<br />
		iRx = socketData.m_currentSocket.EndReceive (asyn);<br />
		if(iRx > 0)<br />
		{<br />
                        // this get client object/class data (nickname, receive buffer for this client, socket)<br />
			ClientSocketType client = GetClientSocket(socketData.m_currentSocket);<br />
<br />
			if(client != null)<br />
			{<br />
                                // create a new receiving buffer for this server/client receive<br />
				if(client.PacketBuffer == null)<br />
					client.PacketBuffer = new MemoryStream();<br />
<br />
                                // append received buffers to that buffer<br />
				BinaryWriter binwrite = new BinaryWriter(client.PacketBuffer);<br />
				binwrite.Write(socketData.dataBuffer, 0, iRx);<br />
<br />
                                // if packets for this message are finished process message<br />
                                // ?!? WORKING ?<br />
				if(asyn.IsCompleted)<br />
				{<br />
                                        // prepare the stream and send to a parsing function<br />
					MemoryStream stream = new MemoryStream(client.PacketBuffer.GetBuffer(), 0, client.PacketBuffer.GetBuffer().Length,true, false);<br />
					ProcessMessage(socketData.m_currentSocket, stream );<br />
<br />
                                        // empty client receive buffer<br />
					client.PacketBuffer = null;<br />
				}<br />
			}<br />
<br />
			// Continue the waiting for data on the Socket<br />
			WaitForData( socketData.m_currentSocket );<br />
		}<br />
		else<br />
		{<br />
			((SocketPacket)asyn.AsyncState).m_currentSocket.Close();<br />
			RemoveSocketFromList(((SocketPacket)asyn.AsyncState).m_currentSocket);<br />
			AddLogMessage("Disconnected user");				<br />
		}<br />
	}<br />
	catch (ArgumentNullException se)<br />
	{<br />
		AddLogMessage(se.Message );				<br />
	}<br />
	catch (ObjectDisposedException )<br />
	{<br />
		System.Diagnostics.Debugger.Log(0,"1","\nOnDataReceived: Socket has been closed\n");<br />
	}<br />
	catch(SocketException se)<br />
	{<br />
		AddLogMessage(se.Message );<br />
		if(se.ErrorCode == 10054)<br />
		{<br />
			((SocketPacket)asyn.AsyncState).m_currentSocket.Close();<br />
			RemoveSocketFromList(((SocketPacket)asyn.AsyncState).m_currentSocket);<br />
			AddLogMessage("User disconnected: no ping received");<br />
		}<br />
	}<br />
}<br />



asyn.IsCompleted gives always True and i'm not able to understand how the message is fully received. What i need to change in this logic?

Thank you
GeneralRe: IAsyncResult : how to check a message is completed Pin
Mike Dimmick8-Mar-05 8:06
Mike Dimmick8-Mar-05 8:06 
GeneralRe: IAsyncResult : how to check a message is completed Pin
vinu.netguy8-Mar-05 10:29
vinu.netguy8-Mar-05 10:29 
Generalinstalling multiple versions of .net Pin
nsainaveen8-Mar-05 1:45
nsainaveen8-Mar-05 1:45 
GeneralRe: installing multiple versions of .net Pin
gnjunge8-Mar-05 3:29
gnjunge8-Mar-05 3:29 
GeneralRe: installing multiple versions of .net Pin
nsainaveen8-Mar-05 22:15
nsainaveen8-Mar-05 22:15 
GeneralRe: installing multiple versions of .net Pin
gnjunge9-Mar-05 0:19
gnjunge9-Mar-05 0:19 
GeneralDataGrid Pin
TTECHNOLOGY7-Mar-05 22:41
TTECHNOLOGY7-Mar-05 22:41 
GeneralMultithreading and Appdomain Pin
joshi_vipul7-Mar-05 18:43
joshi_vipul7-Mar-05 18:43 
GeneralRe: Multithreading and Appdomain Pin
TylerBrinks8-Mar-05 7:19
TylerBrinks8-Mar-05 7:19 
GeneralRe: Multithreading and Appdomain Pin
joshi_vipul8-Mar-05 17:40
joshi_vipul8-Mar-05 17:40 
QuestionDataGrid update??? Pin
Small Rat7-Mar-05 14:25
Small Rat7-Mar-05 14:25 
AnswerRe: DataGrid update??? Pin
ursus zeta12-Mar-05 8:58
ursus zeta12-Mar-05 8:58 
Questioninsert too slow???? Pin
Small Rat7-Mar-05 13:02
Small Rat7-Mar-05 13:02 
AnswerRe: insert too slow???? Pin
Oskars10-Mar-05 22:32
Oskars10-Mar-05 22:32 
GeneralClasswizard in visual stuio 7.0 ... Pin
vchedalla7-Mar-05 11:33
vchedalla7-Mar-05 11:33 
GeneralRe: Classwizard in visual stuio 7.0 ... Pin
bneacetp7-Mar-05 17:23
bneacetp7-Mar-05 17:23 
GeneralRe: Classwizard in visual stuio 7.0 ... Pin
vchedalla8-Mar-05 2:29
vchedalla8-Mar-05 2:29 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.