Я пытался отправить файл с клиента на серверное приложение, используя класс TCPClient в C #. Перед отправкой фактических данных я отправляю некоторую дополнительную информацию, такую как точный размер файла и имя файла, чтобы серверное приложение знало, сколько еще нужно прочитать. Самое смешное, что все было в порядке, когда я тестировал его на 127.0.0.1 - как только я заменил IP-адрес реальным, сервер смог прочитать только около 1,5 КБ отправленных данных. Он по-прежнему получает имя файла и размер файла, но нет никакого способа получить реальные данные.
В целях тестирования я заменил изображение, которое я собирался отправить, простой строкой, и передача прошла нормально, поэтому я предполагаю, что существует проблема с отправкой и получением фрагментов данных, но я не получаю никаких исключений для либо на стороне клиента.
Кто-нибудь получил идею? Ура! * * 1005
Edit:
Спасибо, пока что это то, что я получил по кодам. Для клиента:
IPAddress ipAddress = IPAddress.Parse("xx.xx.xx.xx");
int port = 3003;
int bufferSize = 1024;
TcpClient client = new TcpClient();
NetworkStream netStream;
// Connect to server
try
{
client.Connect(new IPEndPoint(ipAddress, port));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
netStream = client.GetStream();
// Read bytes from image
byte[] data = File.ReadAllBytes("C:\\Users\\Dan\\Desktop\\asdf.jpg");
// Build the package
byte[] dataLength = BitConverter.GetBytes(data.Length);
byte[] package = new byte[4 + data.Length];
dataLength.CopyTo(package, 0);
data.CopyTo(package, 4);
// Send to server
int bytesSent = 0;
int bytesLeft = package.Length;
while (bytesLeft > 0)
{
int nextPacketSize = (bytesLeft > bufferSize) ? bufferSize : bytesLeft;
netStream.Write(package, bytesSent, nextPacketSize);
bytesSent += nextPacketSize;
bytesLeft -= nextPacketSize;
}
// Clean up
netStream.Close();
client.Close();
И сервер:
TcpListener listen = new TcpListener(3003);
TcpClient client;
int bufferSize = 1024;
NetworkStream netStream;
int bytesRead = 0;
int allBytesRead = 0;
// Start listening
listen.Start();
// Accept client
client = listen.AcceptTcpClient();
netStream = client.GetStream();
// Read length of incoming data
byte[] length = new byte[4];
bytesRead = netStream.Read(length, 0, 4);
int dataLength = BitConverter.ToInt32(length,0);
// Read the data
int bytesLeft = dataLength;
byte[] data = new byte[dataLength];
while (bytesLeft > 0)
{
int nextPacketSize = (bytesLeft > bufferSize) ? bufferSize : bytesLeft;
bytesRead = netStream.Read(data, allBytesRead, nextPacketSize);
allBytesRead += bytesRead;
bytesLeft -= bytesRead;
}
// Save image to desktop
File.WriteAllBytes("C:\\Users\\Dan\\Desktop\\tcpimage.jpg", data);
// Clean up
netStream.Close();
client.Close();