Прежде всего, вы не понимаете, как работает многопоточное / асинхронное сетевое программирование. Не используйте много доморощенных делегатов.
Во-вторых, не перехватывайте это исключение. Перехватывайте только те исключения, которые вы можете обработать или чтобы предотвратить закрытие приложения. Вы можете прочитать больше об исключениях в моем блоге: http://blog.gauffin.org/tag/exceptions/
Очищенный сервер:
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
class SocketServer
{
public static void Main()
{
StreamReader streamReader;
NetworkStream networkStream;
TcpListener tcpListener = new TcpListener(5555);
tcpListener.Start();
Console.WriteLine("The Server has started on port 5555");
Socket serverSocket = tcpListener.AcceptSocket();
try
{
Console.WriteLine("Client connected");
networkStream = new NetworkStream(serverSocket);
streamReader = new StreamReader(networkStream);
while (true)
{
var line = streamReader.ReadLine();
Console.WriteLine(line);
//echoing
var buffer = Encoding.ASCII.GetBytes(line);
networkStream.Write(buffer, 0, buffer.Length);
}
serverSocket.Close();
Console.Read();
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
}
Убран клиент:
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
class SocketClient
{
static void Main(string[] args)
{
TcpClient tcpClient;
NetworkStream networkStream;
StreamWriter streamWriter;
try
{
tcpClient = new TcpClient("localhost", 5555);
networkStream = tcpClient.GetStream();
streamWriter = new StreamWriter(networkStream);
while (true)
{
streamWriter.WriteLine(Console.ReadLine());
streamWriter.Flush();
Console.WriteLine(streamReader.ReadLine());
}
Console.Read();
}
catch (SocketException ex){
Console.WriteLine(ex);
}
}
}
Если вы хотите, чтобы асинхронный клиент / сервер читал о BeginRead / EndRead, BeginWrite, EndWrite. Не общайтесь со своими делегатами.