передача !файлов! по сети

  • Автор темы met123
  • Дата начала
M

met123

#1
Одним словом есть клиентское приложения которое отправляет файлы на сервер
В клиентском приложении все просто


private NetworkStream streamtoserver;
private StreamWriter writer;

public client(string str)
{
TcpClient tcpsocket=new TcpClient (str,65000);
streamtoserver = tcpsocket.GetStream();
writer = new StreamWriter(streamtoserver);
}



потом я отсылаю на сервер через поток writer связанный с сетевым потоком streamtoserver имя файла с этого компа.


public void run(string filename)
{

writer.Write(filename);
writer.Flush();
streamtoserver.Close();
}


На сервере я принимаю через поток связанный с сокетом клиента имя файла (только фрагмент асинхронного чтения):


public void startread()
{
networkstream.BeginRead(buffer, 0, buffer.Length, callbackread, null);
}

private void OnComleteRead(IAsyncResult ar)
{
int bytesread=networkstream.EndRead(ar);
if(bytesread >0)
{
.................
filename = Encoding.UTF8.GetString(buffer, 0, bytesread);
......

}




Потом я связ с этим файлом поток и считую инфу и записую уже в файл на сервере


inputstream = File.OpenRead(filename);
outputstream = File.OpenWrite(ouputfile);
inputstream.BeginRead(buffer, 0, buffer.Length, callbackfile, null);

.................................................
private void OnFileComleteRead(IAsyncResult asyncresult)
{
int bytesread=inputstream.EndRead(asyncresult);
if (bytesread > 0)
{
outputstream.BeginWrite(buffer, 0, buffer.Length, callbackwrite, null);
outputstream.Flush();

}


Но вот я пока данную прогу тестирую на одном компе , использую внутренний айпишник все работает
но когда я буду использовать два компа, мне кажеться, -- тогда когда я передам на сервер имя файл то он тогда будет искать этот файл на сервере а не на клиенте.
Поэтому мне надо как то в клиенте передавать после имени файла и его содержимое в сетевой поток , а потом его считывать на сервере з потока связанного с сокетом клиента.
как это реализовать , или я не прав и все и так будет работать.????

я заметил что только StreamWriter или StreamReader можно связ с сетев потоком:

private StreamWriter writer;
writer = new StreamWriter(streamtoserver);

Но как мне вместо имени файла потом впихнуть в этот поток и его содержимое

writer.Write(filename);
writer.Flush();


Помогите плз или подскажите варианты реализации!!!!!!!!!!!!!!!!!!!
 
M
#2
Надо передавать не имя файла, а его содержимое. Либо и имя и содержимое, это как требуется.

Запихнуть в поток содержимое так же просто, как и имя файла. Надо просто прочитать файл и считайные байты файла запихнуть в поток сокета.
 
M

met123

#3
блин а куда считать в буфер? а потом как запихнуть содержимое буфера в Networkstream?
мож примерчик?
 
M
#4
Ну к примеру так:

Код:
			using (StreamReader reader = new StreamReader(new FileStream("C:\\Test.txt")))
using (StreamWriter writer = new StreamWriter(streamtoserver))
{
writer.Write(reader.ReadToEnd());
}
Хотя лучше конечно читать и писать сразу байты.