急急急急急急急急急急???????c# socket编程中出现:无法访问已释放的对象
华为黑名单 2010-07-28 10:09:48 客户端想要连续从固定路径读取图片,然后将图片发送给服务器端,但是我却经常出现发送一张图片之后报
:无法访问已释放的对象 对象名“System.Net.Socket.TcpClient”
客户端简单起见就写循环体里面东西了
try
{
TcpClient client = new TcpClient();
client.Connect(System.Net.IPAddress.Parse("166.111.66.37"), 8880);
string[] files = Directory.GetFiles(@"C:\Documents and Settings\Administrator.B3B7434061FE4C4\My Documents\Visual Studio 2005\Projects\MyProject\通信Client端\通信Client端\bin\Debug\");
foreach (string file in files)
{
string filefullname = Path.GetFileName(file);
string suffix = Path.GetExtension(file);
if (suffix == ".jpg")
{
myMedia.FileName = System.IO.Path.GetExtension(filefullname);
Console.WriteLine(filefullname);
FileStream fs = new FileStream(filefullname, FileMode.Open);
myMedia.LoadFileData(fs);
NetworkStream clientStream = client.GetStream();//创建接收用的Stream
MemoryStream myFile = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(myFile, myMedia);
arrbyte = myFile.ToArray();
myFile.Close();
clientStream.Write(arrbyte, 0, arrbyte.Length);
clientStream.Close();
client.Close();
}
服务器端
namespace ldyServer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private SerializeFile myMedia = new SerializeFile();
private SerializeFile newFile = null;
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
this.button1.Enabled = false;
//新建监听
TcpListener listener = new TcpListener(IPAddress.Parse("166.111.66.37"), 8880);
listener.Stop();
//开始监听
listener.Start();
while (true)
{
const int bufferSize = 40960000;
TcpClient client = listener.AcceptTcpClient();
//接收客户端传过来的数据
NetworkStream clientStream = client.GetStream();//提供网络访问的数据流
byte[] responseBuffer = new byte[bufferSize];//提供一个缓冲区
MemoryStream memStream = new MemoryStream();//将网络接收的数据流储存起来
int bytesRead = 0;
do
{
bytesRead = clientStream.Read(responseBuffer, 0, bufferSize);
memStream.Write(responseBuffer, 0, bytesRead);
} while (bytesRead > 0);
BinaryFormatter formatter = new BinaryFormatter();
memStream.Seek(0, SeekOrigin.Begin);
newFile = (SerializeFile)formatter.Deserialize(memStream);//反序列化以创建与原图形相同的对象图形;
//自定义存放目录 newFile.FileName 存放在debug下面
FileStream fs = new FileStream(newFile.FileName, FileMode.OpenOrCreate);
BinaryWriter w = new BinaryWriter(fs);
w.Write(newFile.FileData);
fs.Close();
memStream.Close();
MessageBox.Show("成功");
}
}