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!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 
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ęt3555 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 268 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 [?]: a776e:
Tekst:

 

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
Helion.pl  
archive To tylko kopia strony wykonana przez robota internetowego! Aby wyświetlić aktualną zawartość przejdź do strony.
Ładowanie...

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