大家好这里有一个发送端和接收端的程序,可以运行时有错误,提示无法访问已释放的对象什么意思?
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace 发送端
{
class Program
{
static void Main(string[] args)
{
IPAddress severip = IPAddress.Parse("127.0.0.1");
IPEndPoint ep = new IPEndPoint(severip, 5353);
Socket QuerySocket=new Socket (AddressFamily .InterNetwork ,SocketType .Stream ,ProtocolType .Tcp );
QuerySocket .Connect (ep);
byte[] senMsg = Encoding.ASCII.GetBytes("message send");
if(QuerySocket .Connected )
{
QuerySocket .Send (senMsg );
}
QuerySocket.Shutdown(SocketShutdown.Send);
QuerySocket.Close();
Console.ReadKey();
}
}
}
namespace 接受端
{
class Program
{
[STAThread]
static void Main(string[] args)
{
IPAddress hostIP = (Dns.Resolve(IPAddress.Any.ToString())).AddressList[0];
IPEndPoint ep = new IPEndPoint(hostIP, 5353);
Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listenSocket.Blocking = true;
listenSocket.Bind(ep);
listenSocket.Listen(2);
Socket querySocket = listenSocket.Accept();
string sb="";
while (true)
{
byte[] bufferRe = new byte[1024];
int n;
n = querySocket.Receive(bufferRe);//提示这儿有错为什么
sb = sb + Encoding.ASCII.GetString(bufferRe, 0, n);
if (sb.IndexOf("<EOF>") > -1)
{
Console.WriteLine("receive complish");
break;
}
Console.WriteLine("the message is" + sb);
querySocket.Shutdown(SocketShutdown.Both);
querySocket.Close();
}
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace 发送端
{
class Program
{
static void Main(string[] args)
{
IPAddress severip = IPAddress.Parse("127.0.0.1");
IPEndPoint ep = new IPEndPoint(severip, 5353);
Socket QuerySocket=new Socket (AddressFamily .InterNetwork ,SocketType .Stream ,ProtocolType .Tcp );
QuerySocket .Connect (ep);
byte[] senMsg = Encoding.ASCII.GetBytes("message send");
if(QuerySocket .Connected )
{
QuerySocket .Send (senMsg );
}
QuerySocket.Shutdown(SocketShutdown.Send);
QuerySocket.Close();
Console.ReadKey();
}
}
}
namespace 接受端
{
class Program
{
[STAThread]
static void Main(string[] args)
{
IPAddress hostIP = (Dns.Resolve(IPAddress.Any.ToString())).AddressList[0];
IPEndPoint ep = new IPEndPoint(hostIP, 5353);
Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listenSocket.Blocking = true;
listenSocket.Bind(ep);
listenSocket.Listen(2);
Socket querySocket = listenSocket.Accept();
string sb="";
while (true)
{
byte[] bufferRe = new byte[1024];
int n;
n = querySocket.Receive(bufferRe);//提示这儿有错为什么
sb = sb + Encoding.ASCII.GetString(bufferRe, 0, n);
if (sb.IndexOf("<EOF>") > -1)
{
Console.WriteLine("receive complish");
break;
}
Console.WriteLine("the message is" + sb);
querySocket.Shutdown(SocketShutdown.Both);
querySocket.Close();
}
}
}
}
都Close掉了当然就释放掉了……
把这句话放到while外面
while (true)
{
byte[] bufferRe = new byte[1024];
int n;
n = querySocket.Receive(bufferRe);//提示这儿有错为什么
sb = sb + Encoding.ASCII.GetString(bufferRe, 0, n);
if (sb.IndexOf("<EOF>") > -1)
{
Console.WriteLine("receive complish");
break;
}
Console.WriteLine("the message is" + sb);
querySocket.Shutdown(SocketShutdown.Both);
}
querySocket.Close();
你还没收完呢 发送端就关闭了
发送端:发完了不要马上关
Console.ReadKey();QuerySocket.Shutdown(SocketShutdown.Send);
QuerySocket.Close();
Console.ReadKey();
可以设置变量string strRecieve =string.Empty;
while()
{ ……
strRecieve = strReceive + sb ;
}
Console.WriteLine("the message is" + strRecieve );