Ik ben vrij nieuw met .NET en C#.
Ik ben een applicatie aan het maken met een klein communicatie protocol.
Er is een server gedeelt en een client gedeelte. Het is mogelijk dat meerdere clients tegelijk de server benaderen. Vandaar dat ik gebruik wil maken van een asynchrone verbinding.
Op het moment kan ik met de volgende code 1 verbinding afhandelen. Op het moment dat er tegelijkertijd nog een verbding word gemaakt word deze wel geaccepteerd, alleen worden de commando's niet afgehandeld.
Dit is mijn code:
sListenSocket is een globale Socket variable.
Ik heb geprobeerd om de HandleSocket() methode in een eigen thread te starten. Dit werkt niet helemaal goed (krijg Memory Exceptions). Ik heb gekeken naar Socket.CallBack(), maar dit werkt ook niet helemaal hoe ik het wil (verbinding word direct vebroken na het openen van de socket).
Op welke manier kan ik zorgen dat ik meerdere verbdindingen tegelijk kan afhandelen?
mijn HandleSocket methode ziet er als volgt uit:
Ik ben een applicatie aan het maken met een klein communicatie protocol.
Er is een server gedeelt en een client gedeelte. Het is mogelijk dat meerdere clients tegelijk de server benaderen. Vandaar dat ik gebruik wil maken van een asynchrone verbinding.
Op het moment kan ik met de volgende code 1 verbinding afhandelen. Op het moment dat er tegelijkertijd nog een verbding word gemaakt word deze wel geaccepteerd, alleen worden de commando's niet afgehandeld.
Dit is mijn code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| public void Listen()
{
IPEndPoint lep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), sPort);
sListener = new TcpListener(lep);
sListener.Start();
sListenSocket = sListener.AcceptSocket();
while (true)
{
try
{
if (sListenSocket.Connected)
{
HandleSocket(); }
}
catch
{
sListenSocket.Shutdown(SocketShutdown.Both);
sListenSocket = sListener.AcceptSocket();
}
} //while
} //method |
sListenSocket is een globale Socket variable.
Ik heb geprobeerd om de HandleSocket() methode in een eigen thread te starten. Dit werkt niet helemaal goed (krijg Memory Exceptions). Ik heb gekeken naar Socket.CallBack(), maar dit werkt ook niet helemaal hoe ik het wil (verbinding word direct vebroken na het openen van de socket).
Op welke manier kan ik zorgen dat ik meerdere verbdindingen tegelijk kan afhandelen?
mijn HandleSocket methode ziet er als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| private void HandleSocket()
{
Socket sListenSocket = (Socket)ar.AsyncState;
NetworkStream Stream = new NetworkStream(sListenSocket);
System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(Stream);
System.IO.StreamReader streamReader = new System.IO.StreamReader(Stream);
try
{
streamWriter.WriteLine(AddCheckSum(HandleCommand(new PMMPPacket(streamReader.ReadLine()))));
streamWriter.Flush();
}
catch
{
streamWriter.WriteLine(AddCheckSum(Communication.ControlCodes.INVALID_CMD));
streamWriter.Flush();
}
//sListenSocket.Close();
//sListenSocket.Shutdown(SocketShutdown.Both);
} |