[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

Aplikacja w #

michal.kolasinski

6/4/2007 12:38:00 PM

Witam. Potrzebuje pomocy przy aplikacji sieciowej w C#. Mam programy
które wykorzystuja protokól TCP/IP do przesylania plików. Jeden
program to klient a drugi serwer. Po przeslaniu pliku przez klienta
serwer zapisuje jego zawartosc w pliku o z góry narzuconej nazwie.
Chodzi o to aby serwer zapisal plik o takiej samej nazwie jaka wyslal
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() + "
polaczony.");
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 zostal zapisany");
handlerSocket = null;
}

}
}

3 Answers

Robert Osowiecki

6/4/2007 12:43:00 PM

0

michal.kolasinski@gmail.com napisa3(a):
> Witam. Potrzebuje pomocy przy aplikacji sieciowej w C#. Mam programy
> które wykorzystuj? protokó3 TCP/IP do przesy3ania plików. Jeden
> program to klient a drugi serwer. Po przes3aniu pliku przez klienta
> serwer zapisuje jego zawarto?a w pliku o z góry narzuconej nazwie.
> Chodzi o to aby serwer zapisa3 plik o takiej samej nazwie jak? wys3a3
> klient.

I liczysz, ?e kto? odrobi za ciebie prace domow??
Gdyby? sam napisa3 tyle co pod spodem, poradzi3by? sobie i z reszt?.
Ale 3atwiej wytrzasn?a sk?d? przyk3ad (pewnie od wyk3adowcy) i liczya,
?e kto? zrobi co nale?y.

Zakasaa rekawy i do roboty!

R.

Robert Osowiecki

6/4/2007 12:44:00 PM

0

Robert Osowiecki napisa3(a):
> Zakasaa rekawy i do roboty!

Aha i jeszcze: http://rtfm.ki...

R.

Krzysztof Jamróz

6/5/2007 6:16:00 AM

0

Dnia Mon, 04 Jun 2007 12:38:16 -0000, michal.kolasinski@gmail.com
napisa3(a):

> Witam. Potrzebuje pomocy przy aplikacji sieciowej w C#. Mam programy
> które wykorzystuj? protokó3 TCP/IP do przesy3ania plików. Jeden
> program to klient a drugi serwer. Po przes3aniu pliku przez klienta
> serwer zapisuje jego zawarto?a w pliku o z góry narzuconej nazwie.
> Chodzi o to aby serwer zapisa3 plik o takiej samej nazwie jak? wys3a3
> klient.

Zapewne musisz jako? przekazaa nazwe pliku do serwera. Mo?esz to na
przyk3ad zrobia przed przes3aniem zawarto?ci pliku.

--
Krzysztof Jamróz