[英]System.ObjectDisposedException in TCP sockets in C#
這是我的服務器:
class Server
{
static void Main(string[] args)
{
TcpListener listener = new TcpListener(IPAddress.Any, 5004);
listener.Start();
TcpClient client;
while (true)
{
client = listener.AcceptTcpClient();
if (client.Connected)
{
Console.WriteLine("client connected");
break;
}
}
NetworkStream sr = client.GetStream();
while (true)
{
byte[] message = new byte[1024];
sr.Read(message, 0, message.Length);
sr.Close();
Console.WriteLine(message.ToString());
}
}
}
這是我的客戶:
class Program
{
static void Main(string[] args)
{
TcpClient client = new TcpClient();
Console.WriteLine("Insert server address");
string server = Console.ReadLine();
if (server == "")
{
server = "192.168.1.2";
}
client.Connect(IPAddress.Parse(server), 5004);
NetworkStream sw = client.GetStream();
while (true)
{
byte[] message = Encoding.ASCII.GetBytes(Console.ReadLine());
sw.Write(message, 0, message.Length);
sw.Close();
}
}
}
當我運行服務器和客戶端時,一切正常,並且出現“客戶端已連接”消息。 問題是,當我嘗試從客戶端向服務器發送消息時,在sr.Read(message, 0, message.Length);
中的服務器上引發了System.ObjectDisposedException
sr.Read(message, 0, message.Length);
線。 知道如何解決該問題或原因是什么?
您正在同時在客戶端和服務器的while循環中關閉流。 將Close
移到循環外部,或者更好的是,利用Close
調用Dispose的事實,它允許您使用IDisposable
接口功能,例如, using
:
using (NetworkStream sw = client.GetStream())
{
while (true)
{
byte[] message = Encoding.ASCII.GetBytes(Console.ReadLine());
sw.Write(message, 0, message.Length);
// Todo : Implement some kind of termination to the loop
}
sw.Flush();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.