Forum

aplikacja sieciowa w C#

[+] Twoje konto

Subskrybuj kanał najnowszych wypowiedzi w tym temacie

Wątek Forum > Porady > Programowanie > aplikacja sieciowa w C#

Idź do strony:1
Ocena: (Ocen: 0)
Wypowiedzi 1 - 2 z 2
 Gość raven Kopiuj nick (77.91.44.*)
Wypowiedź dodana: 2 czerwca 2007, 17:28:23 | Wypowiedź edytowana Ostatnio edytowana: 2 czerwca 2007, 17:59:06 po raz 1-wszy przez: Dżyszla
« Opcje

Moderowane przez Dżyszla :

1. Przeniesiono do właściwego działu
2. Zastosowano znacznik [ code ]

Witam. Potrzebuje pomocy przy aplikacji sieciowej w C#. Mam programy które wykożystują protokół TCP/IP do przesyłania plików. Jeden program to klient a drugi serwer. Po przesłaniu pliku przez klienta serwer zapisuje jego zawartość w pliku o z góry nażuconej nazwie. Chodzi o to aby serwer zapisał plik o takiej samej nazwie jaką wysłał klient.


Kod aplikacji Klienta:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.IO;

namespace TCP_Client
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void btnBrowse_Click(object sender, EventArgs e)
{
// Wywolanie okna dialogowego sluzacego do wskazania pliku
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.ShowDialog();
tbFilename.Text = openFileDialog1.FileName;
}

private void btnSend_Click(object sender, EventArgs e)
{
Stream fileStream = File.OpenRead(tbFilename.Text);
// Alokacja pamieci dla pliku
byte[] fileBuffer = new byte[fileStream.Length];
fileStream.Read(fileBuffer, 0, (int)fileStream.Length);
// Otwarcie polaczenia TCP/IP i wyslanie pliku
TcpClient clientSocket = new TcpClient(tbServer.Text, 8080);
NetworkStream networkStream = clientSocket.GetStream();
networkStream.Write(fileBuffer, 0, fileBuffer.GetLength(0));
networkStream.Close();
}

private void Form1_Load(object sender, EventArgs e)
{

}
}
}

Kod aplikacji serwera:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.IO;

namespace TCP_Server
{
public partial class Form1 : Form
{
private System.Collections.ArrayList alSockets;

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
Form1.CheckForIllegalCrossThreadCalls = false;
IPHostEntry IPHost = Dns.GetHostByName(Dns.GetHostName());
lblStatus.Text = "Mój adres IP: " + IPHost.AddressList[0].ToString();
alSockets = new System.Collections.ArrayList();
Thread thdListener = new Thread(new ThreadStart(listenerThread));
thdListener.Start();
}

public void listenerThread()
{
// Uruchomienie polaczenia TCP
TcpListener tcpListener = new TcpListener(IPAddress.Any, 8080);
tcpListener.Start();
while (true)
{
Socket handlerSocket = tcpListener.AcceptSocket();
if (handlerSocket.Connected)
{
lbConnections.Items.Add(handlerSocket.RemoteEndPoint.ToString() + " połączony.");
lock (this)
{
alSockets.Add(handlerSocket);
}
ThreadStart thdstHandler = new ThreadStart(handlerThread);
Thread thdHandler = new Thread(thdstHandler);
thdHandler.Start();
}
}
}

public void handlerThread()
{
Socket handlerSocket = (Socket)alSockets[alSockets.Count - 1];
NetworkStream networkStream = new NetworkStream(handlerSocket);
int thisRead = 0;
int blockSize = 1024;
Byte[] dataByte = new Byte[blockSize];

lock (this)
{
// Tylko jeden proces moze miec dostep
// do tego samego pliku w okreslonym czasie
Stream fileStream;
fileStream = File.Open("c:\cwiczenie\upload.txt", FileMode.Truncate);
while (true)
{
thisRead = networkStream.Read(dataByte, 0, blockSize);
fileStream.Write(dataByte, 0, thisRead);
if (thisRead == 0) break;
}
fileStream.Close();
}
lbConnections.Items.Add("Plik został zapisany");
handlerSocket = null;
}

}
}

 Gość REKLAMA Kopiuj nick (*->*)
Wypowiedź dodana: 2 czerwca 2007, 17:28:24

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (83.15.146.*) |  
Wypowiedź dodana: 2 czerwca 2007, 17:56:05 | Wypowiedź edytowana Ostatnio edytowana: 2 czerwca 2007, 17:59:23 po raz 1-wszy przez: Dżyszla
« Opcje

Wystarczy przesłać ta nazwę, a następnie odczytać do zmiennej. Można dodatkowo przesłać jej długość...

private void btnSend_Click(object sender, EventArgs e)
{
.
.
.
networkStream.Write((char)9, 0, 1);
networkStream.Write("upload.txt", 0, 9);
networkStream.Write(fileBuffer, 0, fileBuffer.GetLength(0));
.
.
.

public void handlerThread()
{
.
.
.
String pfilename;
int pfilenamelen;
Stream fileStream;

networkStream.Read(pfilenamelen, 0, 1);
networkStream.Read(pfilename, 0, pfilenamelen);

fileStream = File.Open(pfilename, FileMode.Truncate);
while (true)
{
thisRead = networkStream.Read(dataByte, 0, blockSize);
fileStream.Write(dataByte, 0, thisRead);
if (thisRead == 0) break;
.
.
.

tak w zarysie (nie jestem pewien użytych zmiennych ani innych elementów systematyki - nigdy w C# nie programowałem.

Ale:
1. Wysyłamy długość nazwy pliku jako 1 bajt
A. Odbieramy długość jako 1 bajt
2. Wysyłamy nazwę pliku jako n bajtów (wysłaną w punkcie 1)
B. Odbieramy nazwę pliku jako n bajtów (odczytaną w punkcie A)
3/C. Pozostałe dane.


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

 
Idź do strony:1

[+] Pokaż/odśwież listę czytających i monitorujących ten wątek

Podobne tematy:
Tytuł wątkuDziałWypowiedziWyświetleńOcenaOstatnia wypowiedź
Wątekobudowa sieciowa nie widzi dyskuPorady / Sprzęt3571 3.05.2010 21:55:54
Wątek[aplikacja tekstowa pod XP, hijackthis] Coś kolejkuje (chwilowe opóźnienia) obsługę klawiatury.Porady / Oprogramowanie, systemy operacyjne141 294 16.10.2007 16:57:18

Nowa wypowiedź

Nowa wypowiedź
Nie jesteś zalogowany; będziesz traktowany jako gość!
Zaloguj Zaloguj
Nick (gość): | Przepisz ten kod [?]: 852ea:
Tekst:

 
* Wysyłając formularz wyrażasz zgodę na przetwarzanie przekazanych danych w zakresie wskazanym w Regulaminie

Subskrybuj kanał najnowszych wypowiedzi w tym temacie


Chcesz mieć też takie forum na swojej stronie? Napisz!

Strona istnieje od 25.01.2001
Ta strona używa plików Cookie.
Korzystając z niej wyrażasz zgodę na przetwarzanie danych a zakresie podanym w Polityce Prywatności.
 
archive To tylko kopia strony wykonana przez robota internetowego! Aby wyświetlić aktualną zawartość przejdź do strony.

Optymalizowane dla przeglądarki Firefox
© Copyright 2001-2018 Dawid Najgiebauer. Wszelkie prawa zastrzeżone.
Ostatnia aktualizacja podstrony: 15.07.2018 16:27
Wszystkie czasy dla strefy czasowej: Europe/Warsaw