Here is code I am using to create a socket listener:
public void Run()
{
go = true;
Random rand = new Random();
// Buffer for reading data
Byte[] bytes = new Byte[1024];
String data = null;
while (go)
{
TcpClient tcpc = FromAnotherClass.tcpl.AcceptTcpClient(); //accept
connection
data = null;
// Get a stream object for reading and writing
NetworkStream stream = tcpc.GetStream();
// Loop to receive all the data sent by the client.
int i;
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
// Translate data bytes to a ASCII string.
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
// Process the data sent by the client.
if (data != "")
{
System.Console.WriteLine(data);
}
}
Thread.Sleep(1000 + rand.Next(2000));
}
}
My question is can this code handle connections from multiple clients?
Or should I have a separate listener for each client?
Thanks for help.
Ignacio Machin ( .NET/ C# MVP ) - 30 Jul 2008 21:04 GMT
> My question is can this code handle connections from multiple clients?
>
> Or should I have a separate listener for each client?
You need to have one thread listening for connection, and when a
connection is received a new thread is spawned to handle it.
I have posted similar code in the past, it's very easily done with a
Sync Queue.
Look in the archive or post back if you do not find my old posts
Ignacio Machin ( .NET/ C# MVP ) - 30 Jul 2008 21:07 GMT
found the post:
while(true)
{
Socket s = listener1.AcceptSocket();
syncedQueue.Enqueue( s );
new Thread( new ThreadStart( workerMethod) ).Start();
}
workerMethod()
{
Socket s = syncedQueue.Dequeue();
}
You have to use a synced queue though:
syncedqueue = Queue.Synchonize( new Queue() );
Markgoldin - 30 Jul 2008 21:48 GMT
This is a bit above my head. How do I pull data from it?
> found the post:
>
[quoted text clipped - 13 lines]
>
> syncedqueue = Queue.Synchonize( new Queue() );