Вот пример кода сервера и клиента в C#. Сервер отправит массив строк, и клиент получит его и отобразит, а затем клиент отправит идентификатор, и сервер получит его и отобразит. Но я получаю исключение на своем сервере во время запуска обоих из них.Отображение строкового массива на клиентской консоли, отправленного с сервера в C#
Исключением является следующим:
Необработанное исключение типа «System.ObjectDisposedException» произошло в System.dll
Дополнительная информация: Не удается получить доступ к объекту, расположенную.
Клиент:
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;
using System.Xml.Serialization;
namespace Client
{
class Program
{
static void Main(string[] args)
{
try
{
byte[] data = new byte[1024];
string stringData;
TcpClient tcpClient = new TcpClient("127.0.0.1", 1234);
NetworkStream ns = tcpClient.GetStream();
var serializer = new XmlSerializer(typeof(string[]));
var stringArr = (string[])serializer.Deserialize(tcpClient.GetStream());
foreach (string s in stringArr)
{
Console.WriteLine(s);
}
string input = Console.ReadLine();
ns.Write(Encoding.ASCII.GetBytes(input), 0, input.Length);
ns.Flush();
}
catch (Exception e)
{
Console.Write(e.Message);
}
Console.Read();
}
}
}
Сервер:
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;
using System.Xml.Serialization;
namespace server
{
class Program
{
static void Main(string[] args)
{
TcpListener tcpListener = new TcpListener(IPAddress.Any, 1234);
tcpListener.Start();
while (true)
{
TcpClient tcpClient = tcpListener.AcceptTcpClient();
byte[] data = new byte[1024];
NetworkStream ns = tcpClient.GetStream();
string[] arr1 = new string[] { "one", "two", "three" };
var serializer = new XmlSerializer(typeof(string[]));
serializer.Serialize(tcpClient.GetStream(), arr1);
tcpClient.Close();
int recv = ns.Read(data, 0, data.Length); //getting exception in this line
string id = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine(id);
}
}
}
}
Есть ли что-нибудь не так?
Что мне нужно изменить, чтобы избежать этого исключения?
Я вижу, что это третий раз, когда вы отправляете тот же вопрос с добавленными деталями. Вы можете отредактировать свой вопрос вместо его повторной отправки. Таким образом, предыдущие ответы не будут потеряны. – KOTIX
Почему вы делаете 'tcpClient.Close()', если вы хотите прочитать данные из этого потока позже? Пока не закрывайте соединение. –
Если я не использую это, массив строк не будет отображаться @Maximilian Gerhardt –