Я пишу небольшое консольное приложение, которое отправляет содержимое файла в формате base64 по TCP.Кажется, я не могу отправить данные сразу, поэтому я пытаюсь сделать цикл while, который получает все данные из NetworkStream, но я всегда получаю это исключение при этом:
Unhandled Exception: System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote hostat System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) --- End of inner exception stack trace --- at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) at File_Transfer_Server.Program.Main(String[] args) in D:\Files from PC\Visual Basic Projects - =&+Ivan+&=\Tesseract\Temp\File Transfer\File_Transfer_Server\Program.cs:line 31
Это код моего клиента:
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace File_Transfer_Client
{
class Program
{
static void Main(string[] args)
{
TcpClient client = new TcpClient();
client.Connect("127.0.0.1", 6666);
NetworkStream clientNetworkStream = client.GetStream();
string fileContent = FileBase64Encoding(@"D:\Download\AtomSetup-x64.exe");
byte[] fileBytes = Encoding.ASCII.GetBytes(fileContent);
byte[] fileLength = Encoding.ASCII.GetBytes(fileBytes.Length.ToString());
clientNetworkStream.Write(fileBytes, 0, fileBytes.Length);
Console.WriteLine("Send");
}
static string FileBase64Encoding(string path)
{
byte[] fileBytes = File.ReadAllBytes(path);
string fileBase64String = Convert.ToBase64String(fileBytes);
return fileBase64String;
}
}
}
А это код моего сервера:
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace File_Transfer_Server
{
class Program
{
static void Main(string[] args)
{
TcpListener serverListener = new TcpListener(IPAddress.Parse("127.0.0.1"), 6666);
serverListener.Start();
TcpClient tcpClient = serverListener.AcceptTcpClient();
Console.WriteLine(">>> Receiving");
byte[] clientBuffer = new byte[1024];
using (NetworkStream clientNStream = tcpClient.GetStream())
{
int i;
string received = "";
string data = null;
while ((i = clientNStream.Read(clientBuffer, 0, clientBuffer.Length)) != 0) // exception
{
data = Encoding.ASCII.GetString(clientBuffer, 0, i);
received += data;
}
File.WriteAllText(@"E:\receivedData.txt", received);
Console.WriteLine(">>>Done");
}
}
}
}
Я испробовал практически любое решение, включая потоки памяти, но у меня ничего не получалось.Я буду признателен за любую помощь, не будучи судим слишком много.Заранее спасибо!