PDA

View Full Version : سوال: (ارسال فایل در شبکه با استفاده از سوکت) خطا هنگام نوشتن اطلاعات با کلاس NetworkStream



mousa1992
شنبه 07 اردیبهشت 1392, 17:14 عصر
سلام دوستان
ممنون میشم راهنمایی کنید
برنامه ای رو نوشتم برای ارسال فایل روی شبکه با استفاده از سوکت - گاهی با خطای زیر مواجه میشم

Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host.

این قسمتی از کد هست برای ارسال فایل
int bufferSize = client.ReceiveBufferSize;

NetworkStream ns = client.GetStream();

int totalByteSend = 0;

// send file
for (int i = 0; i <= fs.Length / bufferSize; i++)
{
if (fs.Length - (i * bufferSize) >= bufferSize)
{
ns.Write(data, i * bufferSize, bufferSize);
totalByteSend += bufferSize;
}
else
{
ns.Write(data, i * bufferSize, (int)fs.Length - (i * bufferSize));
totalByteSend += (int)fs.Length - (i * bufferSize);
}

که این خطا رو از این خط میگیره
ns.Write(data, i * bufferSize, bufferSize);

دوستان منتظر تجارب ارزشمندتون هستم

mousa1992
شنبه 07 اردیبهشت 1392, 21:18 عصر
متن ارور رو توی گوگل سرچ کردم و ی سری از سایت ها رو گشتم ولی به نتیجه ای نرسیدم دوستان ممنون میشم تجربیاتتون رو قرار بدید

mousa1992
دوشنبه 09 اردیبهشت 1392, 03:06 صبح
از دوستان کسی نمیدونه مشکل از کجاست ؟:قلب:

hamide741
سه شنبه 10 اردیبهشت 1392, 18:06 عصر
باسلام ميشه كد رو كامل بزارين

mousa1992
سه شنبه 10 اردیبهشت 1392, 18:41 عصر
سلام

این قسمت توی کلاس فرم تعریف میشه


int portNo = 501;
string reciverIP;
TcpClient client;
TcpListener listener;
byte[] data;


سرور


OpenFileDialog open = new OpenFileDialog();
if (open.ShowDialog() == DialogResult.OK)
{
// read file bytes
FileStream fs = new FileStream(open.FileName, FileMode.Open, FileAccess.Read);
data = new byte[fs.Length];

fs.Read(data, 0,(Int32)fs.Length);

client = new TcpClient();
client.Connect(reciverIP, portNo);

int bufferSize = client.ReceiveBufferSize;

NetworkStream ns = client.GetStream();

int totalByteSend = 0;

// send file
for (int i = 0; i <= fs.Length / bufferSize; i++)
{
if (fs.Length - (i * bufferSize) >= bufferSize)
{
ns.Write(data, i * bufferSize, bufferSize);
totalByteSend += bufferSize;
}
else
{
ns.Write(data, i * bufferSize, (int)fs.Length - (i * bufferSize));
totalByteSend += (int)fs.Length - (i * bufferSize);
}

}


کلاینت

IPHostEntry ips = Dns.GetHostEntry(Dns.GetHostName());
IPAddress localAddress = IPAddress.Parse(ips.AddressList[0].ToString());

listener = new TcpListener(localAddress, portNo);
listener.Start();

TcpClient tcpClient = listener.AcceptTcpClient();
NetworkStream nws = tcpClient.GetStream();

byte[] DataReciver = new byte[tcpClient.ReceiveBufferSize];

FileStream fs = new FileStream(Application.StartupPath + "\\" + new Random().Next(2, 10000).ToString(), FileMode.Append, FileAccess.Write);

do
{
int bytesRead = nws.Read(DataReciver, 0, tcpClient.ReceiveBufferSize);
fs.Write(data, 0, bytesRead);

Application.DoEvents();
}
while (nws.DataAvailable);

tcpClient.Close();
fs.Close();
listener.Stop();

hamide741
چهارشنبه 11 اردیبهشت 1392, 16:01 عصر
با سلام يك سر به اين آدرس بزن ببين ميتونه كمكت كنه
http://stackoverflow.com/questions/3353984/sending-and-receiving-files-socket-programming-c-sharp