Я новичок в сокетах и пытаюсь написать клиент-серверное приложение. Мое приложение имеет два основных метода:
СЕРВЕР работает в отдельном потоке:
public void socketListener()
{
byte[] StreamMessage = new byte[9632];
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint localEndPoint =new IPEndPoint(IPAddress.Any , ControlLayer.GlobalParam.PEER2PEER_PORT);
listener.Bind(localEndPoint);
listener.Listen(10);
while (true)
{
Socket Handler = listener.Accept();
//int ByteRec = Handler.Receive(StreamMessage);
int MessageLength;
MessageLength = Handler.Receive(StreamMessage, 0, StreamMessage.Length, SocketFlags.None);
//return MessageLength;
// string message = System.Text.Encoding.Default.GetString(StreamMessage);
string message = System.Text.Encoding.UTF8.GetString(StreamMessage);
OnDataRecievedFromRemotePeer(this, message, "TcpServer");//send data to screen
Task.Run(() => { ParseMessage(message, Handler); });
}
}
как только данные поступят, я буду собирать данные и отправлять их с помощью Client CLIENT:
public void Write(string message)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(CreateClient), message);
}
private void CreateClient(object message)
{
try
{
peerClient = new TcpClient();
peerClient.Connect(remoteIP, 6001/*TODO remove this */);
netStream = peerClient.GetStream();//<- Exception
StreamWriter sw = new StreamWriter(netStream);
sw.Write((string)(message));
netStream.Close();
peerClient.Close();
}
catch(Exception ex)
{
//TODO :
}
}
Каждая станция симметрична и имеет эти два метода
Я могу сказать, что сервер работает и принимает сокет и данные, но как только я хочу ответить, я получаю исключение в строке, отмеченной в потоке CreateClient
, недоступной для записи, и при просмотре netStream
написано, что у меня есть ObjectDisposed Исключение . Что может быть тому причиной?
Также, пожалуйста, сообщите мне, если требуется больше кода