I am trying to us a simple NetworkStream to transfer a file over tcp. This
works most of the time, but one specific file never downloads(.mdb file). It
seems to close the socket and I get an "unable to write data to transport
connection" error. I have tried multiple ways to transfer this
file(including remoting, sockets without network stream) and downloaded
different examples of client/server byte transfer, all with the same result.
The file downloads around 705kb and stops. File size seems to have nothing
to do with it. The really strange thing is that if I reverse the bytes and
then send the file, it works, but the db is almost always corrupt on the
other side.
Here is the client:
using System;
using System.Diagnost ics;
using System.Runtime. Remoting;
using System.Net;
using System.Net.Sock ets;
using System.Threadin g;
using System.IO;
namespace C4I.FileTransfe r
{
/// <summary>
/// Summary description for FileTransferCli ent.
/// </summary>
public class FileTransferCli ent
{
private int _instanceNumber ;
private Socket clientSocket;
private bool _isReceiving = false;
public bool isReceiving{get {return _isReceiving;}}
private string _ipAddress;
private int _port;
public FileTransferCli ent(int instanceNumber, string ipAddress, int port)
{
_instanceNumber = instanceNumber;
_ipAddress = ipAddress;
_port = port;
}
int _fileLength;
string _fileName;
Thread receiveThread;
public void ReceiveFile(str ing fileName, int fileLength)
{
_fileName = fileName;
clientSocket = new Socket(AddressF amily.InterNetw ork, SocketType.Stre am,
ProtocolType.Tc p);
//clientSocket.Se tSocketOption(S ocketOptionLeve l.Socket,
SocketOptionNam e.ReuseAddress, 1);
IPHostEntry IPHost = Dns.Resolve(_ip Address);
IPEndPoint endPoint = new IPEndPoint(IPHo st.AddressList[0], _port);
clientSocket.Co nnect(endPoint) ;
receiveThread = new Thread(new ThreadStart(Rec eiveFile));
receiveThread.N ame = "Receive Thread";
_fileLength = fileLength;
receiveThread.S tart();
}
private void ReceiveFile()
{
try
{
FileStream fs = null;
try
{
if (!File.Exists(_ fileName))
fs = File.Create(_fi leName);
else
fs = new FileStream(_fil eName, FileMode.Create , FileAccess.Read Write);
int count = 0;
NetworkStream nfs = new NetworkStream(c lientSocket);
while (count < _fileLength)
{
byte[] buffer = new byte[1024];
_isReceiving = true;
int i = nfs.Read(buffer , 0 , buffer.Length);
fs.Write(buffer , 0, (int)i);
count = count + i;
}
_isReceiving = false;
fs.Close();
}
catch (Exception exc)
{
Trace.WriteLine (exc.Message);
try
{
_isReceiving = false;
fs.Close();
}
catch{}
}
}
catch (Exception exc)
{
Trace.WriteLine (exc.Message);
_isReceiving = false;
}
}
}
and here is the server
using System;
using System.Diagnost ics;
using System.IO;
using System.Runtime. Remoting;
using System.Runtime. Remoting.Channe ls;
using System.Net.Sock ets;
using System.Net;
using System.Threadin g;
namespace C4I.FileTransfe r
{
/// <summary>
/// Summary description for FileTransferSer ver.
/// </summary>
public class FileTransferSer ver
{
Socket _serverSocket;
Socket _clientSocket;
Thread listenThread;
string _ipAddress;
int _port;
public FileTransferSer ver(string ipAddress, int port)
{
_ipAddress = ipAddress;
_port = port;
listenThread =new Thread(new ThreadStart(Lis tenForClients)) ;
listenThread.Na me = "File Transfer listen thread";
listenThread.St art();
}
public void ListenForClient s()
{
_serverSocket = new Socket(AddressF amily.InterNetw ork, SocketType.Stre am,
ProtocolType.Tc p);
IPHostEntry IPHost = Dns.Resolve(_ip Address);
IPEndPoint endPoint = new IPEndPoint(IPHo st.AddressList[0], _port);
_serverSocket.B locking = true;
_serverSocket.B ind(endPoint);
_serverSocket.L isten(-1);
try
{
_clientSocket = _serverSocket.A ccept();
}
catch{}
}
NetworkStream ns = null;
public void SendFile(string fileName)
{
if (_clientSocket == null || !_clientSocket. Connected)
{
End(false);
ListenForClient s();
}
Thread.Sleep(10 00);
FileStream fs = new FileStream(file Name, FileMode.Open, FileAccess.Read );
byte[] buffer = new byte[1024];
ns = new NetworkStream(_ clientSocket);
int count = 0;
int length = (int)fs.Length;
try
{
while (count < length && ns.CanWrite)
{
int bytesRead = fs.Read(buffer, 0, buffer.Length);
ns.Write(buffer , 0, bytesRead);
count += bytesRead;
}
}
catch
{
End(false);
ListenForClient s();
}
finally
{
try
{
fs.Close();
}
catch{}
}
}
public void End(bool withDispose)
{
try{ns.Close(); }
catch{}
try{_clientSock et.Shutdown(Soc ketShutdown.Bot h);}
catch{}
try{_clientSock et.Close();}
catch{}
try{_serverSock et.Close();}
catch{}
if (withDispose)
this.Dispose();
}
public void Dispose()
{
if (this.listenThr ead != null)
{
try
{
_serverSocket.C lose();
}
catch{}
try
{
this.listenThre ad.Interrupt();
this.listenThre ad.Abort();
}
catch{}
this.listenThre ad = null;
}
}
}
} 1 2641
It turns out that the database I was trying to send had large amounts of
empty bytes in the file. As soon as I zipped the file and sent it,
everything was fine. This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: cmjman |
last post by:
I have an issue where networkStream.Write doesn't perform its write
downstream from my client program until the network stream is closed.
I then see the data that was sent appear on the other side.
I am sending a small amound of data and read where data wasn't sent
until the buffer reached a larger size. However, there is a
TcpClient property call NoDelay that is suppose to eliminate this
delay. Here is a snippet of my code below. Can...
|
by: Daniel |
last post by:
i would like to konw when the data sent so that i can close the streamwriter
and networkstream is there some sort of call backs/events i have to
implement for this to work? if so how? can i just open neworkstream and
streamwriter, send data and then close it syncrhronously or do i have to
implement some callbacks/events to do this like in vb6?
TcpClient myclient;
|
by: Dustin B |
last post by:
Since this issue encompasses so many things - I have to generally post it I
guess.
I'm building an application for a Wireless PDA - when it is connected to the
Network I tested a TCPListener & TCPClient connection from the Server to the
PDA. The connection allows me to Send from the PDA to the Server - but the
PDA will not read what the Server writes. I copied the exact information from
Microsofts Website on TCP basics - with some...
|
by: 0to60 |
last post by:
I have a class that wraps a TcpClient object and manages all the async
reading of the socket. It works really nice, and I use it all over the
place. But there's this ONE INSTANCE where I create one of these things and
it WON'T read data. If I set a breakpoint in my EndRead callback, it never
goes off. NOTHING is different from anywhere else I use this class, its
just this one place.
Now, if I create a second constructor for my class...
|
by: Srinivas R. Loka |
last post by:
I have a TCP server to which a number of mobile devices connect. If a device
disconnects(mostly no clean close as they usually lose cell coverage or
shutdown), and the server then tries to send data using the
Networkstream.Write method, its NOT throwing an exception. I am using the
TCPClient class.
I am able to reproduce this by shutting down my test device(turning off
power) and then sending some data. The Write just finishes as if the...
| |
by: Kai Thorsrud |
last post by:
Hi!
How do i check: if "NetworkStream.Null = true then" it says .Null does not
supports type Boolean
Thanks
/Kai
|
by: Al Wilkerson |
last post by:
Hey,
Has anyone ever got a "Unable to read data from transport connected" message
after reading data from a streamreader composed of a networkstream.
For example:
Server
TcpListener tcpServer = new TcpListener(localAddr,port);
|
by: littleIO |
last post by:
Hi,
I'm stuck on a very simple problem and just cant seem to get around it, little help would be much appreciated.
I have a server which listens, receives calls, processes them and sends back the results to clients.
The code below makes the client application not to respond. Client can send data but is stuck in the process of waiting information back from the server.
Any ideas?
|
by: Almund |
last post by:
Hi,
I'm trying to implement streaming over http and got stuck with a problem trying to send chunks of data using the .Net NetworkStream object.
All works fine as long as I send the entire data in one invocation to the NetworkStream, like:
_stream.Write(buffer, 0, buffer.Length)
But if i try:
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look !
Part I. Meaning of...
|
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth.
The Art of Business Website Design
Your website is...
| |
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...
| |