Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 10

Fundamental Network

Programming
Hanle multiple socket connection in C#

Lecturer: MSc. Dang Le Bao Chuong Spring 2022


Agenda

I. Socket in C# (cont.)
I. Handle multiple connections using multi-threading

II. TcpListener & TcpClient class


Simple client/server socket interaction
server (running on hostid) client
create socket,
port=x, for incoming
request:
serverSocket = socket()

wait for incoming create socket,


connection request
TCP connect to hostid, port=x
connectionSocket = connection setup clientSocket = socket()
serverSocket.accept()

send request using


read request from clientSocket
connectionSocket

write reply to
connectionSocket read reply from
- Client connection isn’t clientSocket
persisted for later usage close
connectionSocket close
clientSocket
Dedicated listening thread
1. private void listen() serverThread = new
2. { Thread(this.listen);
3. listener.Bind(new
IPEndPoint(IPAddress.Parse(textBox1.Text), _port)); serverThread.Start();
4. listener.Listen(10);
5. started = true;
6. UpdateChatHistoryThreadSafe("Start listening");
7. while (started)
8. {
9. Socket client = listener.Accept(); What about this Socket ? What if
10. UpdateChatHistoryThreadSafe("Accept we want to re-use it for later
connection from " + client.RemoteEndPoint.ToString()); communication with client
11. int readbytes = client.Receive(_buffer);
12. string s = Encoding.UTF8.GetString(_buffer);
13. UpdateChatHistoryThreadSafe(s + "\n");
14.
15. }
16. }
Handle multiple connections
Dedicated thread for reading socket receiving
bytes 1. private void readingClientSocket(Socket client)
2. {
3. byte[] buffer = new byte[_buff_size];
Thread clientThread = 4. while (client.Connected)
new Thread(() => 5. {
6. if (client.Available > 0)
this.readingClientSocke
7. {
t(client)); 8. StringBuilder sb = new StringBuilder();
9. while (client.Available > 0)
clientThread.Start(); 10. {
11. int bRead = client.Receive(buffer, _buff_size,
SocketFlags.None);
12. sb.Append(Encoding.UTF8.GetString(buffer));
13. }

14. string receivedStr = client.RemoteEndPoint + ": "


+ sb.ToString();
15. UpdateTextThreadSafe(receivedStr,
richTextBox1);
16. foreach (Socket s in clientSockets)
17. {
18.
s.Send(Encoding.UTF8.GetBytes(receivedStr));
TcpListener
TcpClient
References
1. Socket: https://docs.microsoft.com/vi-vn/dotnet/framework/network-programming/synchronous-client-socket-
example
2. https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.tcplistener?view=net-6.0
3. https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.tcpclient?view=net-6.0
Assignment week #5
• Tcp Chat Server support multiple clients

You might also like