Thread View: alt.pl.comp.lang.csharp
8 messages
8 total messages
Started by rozrabiak
Fri, 18 Nov 2011 19:59
Socket connection pomiędzy serwerem napisanym w Pythonie a klientem w C#
Author: rozrabiak
Date: Fri, 18 Nov 2011 19:59
Date: Fri, 18 Nov 2011 19:59
32 lines
2621 bytes
2621 bytes
Witam serdecznie.
Czy ma ktoś może doświadczenie w korzystaniu z socketa pomiędzy Pythonem a C#? Mam przykładowy serwer napisany w Pythonie, który nie robi prawie nic poza wysłaniem komunikatu do klienta po podłączeniu. W momencie połączenie serwer wyświetla informację, że podłączył się klient - pokazuje jego IP oraz gniazdo, ale klient w C# zawiesza się w dziwny sposób przy odbieraniu wiadomości z serwera - nie ma wyjątku, program zamraża się nawet gdy jest uruchamiany z poziomu VS.
Klient:
private void Form1_Load(object sender, EventArgs e)
{
msg("Client Started");
clientSocket.Connect("192.168.1.112", 5000);
label1.Text = "Client Socket Program - Server Connected ...";
}
private void button1_Click(object sender, EventArgs e)
{
NetworkStream serverStream = clientSocket.GetStream();
byte[] outStream = System.Text.Encoding.ASCII.GetBytes("Message from Client$");
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();
byte[] inStream = new byte[10025];
serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize);
string returndata = System.Text.Encoding.ASCII.GetString(inStream);
msg("Data from Server : " + returndata);
}
public void msg(string mesg)
{
textBox1.Text = textBox1.Text + Environment.NewLine + " >> " + mesg;
}
Pozdrawiam,
Grzegorz.
Re: Socket connection pomiędzy serwerem napisanym w Pythonie a klientem w C#
Author: Łukasz 'Maly' Ostrowski
Date: Mon, 21 Nov 2011 10:01
Date: Mon, 21 Nov 2011 10:01
35 lines
2880 bytes
2880 bytes
On Fri, 18 Nov 2011 11:59:40 -0800 (PST), rozrabiak wrote:
> Czy ma ktoś może doświadczenie w korzystaniu z socketa pomiędzy Pythonem a C#? Mam przykładowy serwer napisany w Pythonie, który nie robi prawie nic poza wysłaniem komunikatu do klienta po podłączeniu. W momencie połączenie serwer wyświetla informację, że podłączył się klient - pokazuje jego IP oraz gniazdo, ale klient w C# zawiesza się w dziwny sposób przy odbieraniu wiadomości z serwera - nie ma wyjątku, program zamraża się nawet gdy jest uruchamiany z poziomu VS.
Pomogło by załączenie minimalnego działającego kodu servera w Pythonie,
to mogłbym zajrzeć bez kombinacji. ;-).
> Klient:
> <snip>
> private void button1_Click(object sender, EventArgs e)
> {
> NetworkStream serverStream = clientSocket.GetStream();
> byte[] outStream = System.Text.Encoding.ASCII.GetBytes("Message from Client$");
> serverStream.Write(outStream, 0, outStream.Length);
> serverStream.Flush();
>
> byte[] inStream = new byte[10025];
> serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize);
> string returndata = System.Text.Encoding.ASCII.GetString(inStream);
> msg("Data from Server : " + returndata);
> }
Poleganie na ReceiveBufferSize i okolicach w scenariuszach interop
jest średnim pomysłem. Lepiej mieć "well defined protocol".
I uwaga, w zależności od fragmentacji tcp/ip NetworkStream.Read
nie musi zwrócić całej wysłanej wiadomości, a fragment, dlatego
naprawde lepiej albo słać wielkość wiadomości w prologu i dopiero
słać wiadomość, lub słać terminator końca wiadomości(np. \n ;-))
i czytać bajt(znak) po bajcie(znaku) aż do tegoż terminatora.
p.s. Sprawdziłeś WireSharkiem lub czymś podobnym, czy te dane
w ogóle krążą?
--
Pozdrawiam,
Łukasz 'Maly' Ostrowski. http://l3v.pl/
Re: Socket connection pomiędzy serwerem napisanym w Pythonie a klientem w C#
Author: rozrabiak
Date: Mon, 21 Nov 2011 21:45
Date: Mon, 21 Nov 2011 21:45
10 lines
1893 bytes
1893 bytes
Witam, dziękuję za obszerną odpowiedź. Problem był po stronie Pythona, protokół był ustawiony na raw a nie na tcp. Komunikacja działa już. Zastanawiam się jak zrealizować coś takiego: wysyłam z klienta nazwę funkcji/procedury (z parametrem lub bez niego) czegokolwiek co jest zaprogramowane w serwerze na serwerze jest ona wykonywana i zwracany ewentualny wynik tego. Szukam przykładu jakiegoś, ale na razie nic nie znalazłem sensownego. Docelowo chciałbym aby było to właśnie połączenie C# i Pythona, ale przykład mile widziany nawet w samym C#. Pozdrawiam serdecznie, Grzesiek
Re: Socket connection pomiędzy serwerem napisanym w Pythonie a klientem w C#
Author: Robert Winkler
Date: Tue, 22 Nov 2011 10:00
Date: Tue, 22 Nov 2011 10:00
29 lines
2360 bytes
2360 bytes
> Witam, > dziękuję za obszerną odpowiedź. Problem był po stronie Pythona, protokół > był ustawiony na raw a nie na tcp. Komunikacja działa już. > > Zastanawiam się jak zrealizować coś takiego: > wysyłam z klienta nazwę funkcji/procedury (z parametrem lub bez niego) > czegokolwiek co jest zaprogramowane w serwerze na serwerze jest ona > wykonywana i zwracany ewentualny wynik tego. > > Szukam przykładu jakiegoś, ale na razie nic nie znalazłem sensownego. > Docelowo chciałbym aby było to właśnie połączenie C# i Pythona, ale > przykład mile widziany nawet w samym C#. Takie coś nazywa się web service i zwykle do komunikacji używa się protokołu SOAP-a, w .NET aby stworzyć serwer i klienta używa się WCF (Windows Communication Foundation) Przy komunikacji Python <=> .NET możesz pomyśleć też o XML-RPC, sam kilka lat temu używałem http://www.xml-rpc.net/ przy komunikacji z jakimś serwisem używającym tego protokołu, tyle że trzeba było ta bibliotekę lekko poprawić, z powodu błędnego kodowania użytego przy deserializacji komunikatów. -- ____________ Pozdrawiam Robert Winkler
Re: Socket connection pomiędzy serwerem napisanym w Pythonie a klientem w C#
Author: Paweł Kierski
Date: Tue, 22 Nov 2011 11:56
Date: Tue, 22 Nov 2011 11:56
14 lines
1856 bytes
1856 bytes
W dniu 2011-11-21 22:45, rozrabiak pisze:
> Witam,
> dziękuję za obszerną odpowiedź. Problem był po stronie Pythona, protokół był ustawiony na raw a nie na tcp. Komunikacja działa już.
>
> Zastanawiam się jak zrealizować coś takiego:
> wysyłam z klienta nazwę funkcji/procedury (z parametrem lub bez niego) czegokolwiek co jest zaprogramowane w serwerze na serwerze jest ona wykonywana i zwracany ewentualny wynik tego.
>
> Szukam przykładu jakiegoś, ale na razie nic nie znalazłem sensownego. Docelowo chciałbym aby było to właśnie połączenie C# i Pythona, ale przykład mile widziany nawet w samym C#.
YAMI4 - http://www.inspirel.com/yami4/
--
Paweł Kierski
news@pkierski.net
Re: Socket connection pomiędzy serwerem napisanym w Pythonie a klientem w C#
Author: Łukasz 'Maly' Ostrowski
Date: Tue, 22 Nov 2011 12:33
Date: Tue, 22 Nov 2011 12:33
27 lines
2173 bytes
2173 bytes
On Tue, 22 Nov 2011 11:00:13 +0100, Robert Winkler wrote: >> Witam, >> dziękuję za obszerną odpowiedź. Problem był po stronie Pythona, protokół >> był ustawiony na raw a nie na tcp. Komunikacja działa już. >> >> Zastanawiam się jak zrealizować coś takiego: >> wysyłam z klienta nazwę funkcji/procedury (z parametrem lub bez niego) >> czegokolwiek co jest zaprogramowane w serwerze na serwerze jest ona >> wykonywana i zwracany ewentualny wynik tego. >> >> Szukam przykładu jakiegoś, ale na razie nic nie znalazłem sensownego. >> Docelowo chciałbym aby było to właśnie połączenie C# i Pythona, ale >> przykład mile widziany nawet w samym C#. > > Takie coś nazywa się web service i zwykle do komunikacji używa się protokołu > SOAP-a, > w .NET aby stworzyć serwer i klienta używa się WCF (Windows Communication > Foundation) I ja też do tej ścieżki bym się przychylał, a jeżeli OP chce sobie sam porzeźbić to zawsze może zaimplementować jakiś prosty tekstowy protokół pomiędzy Pythonem/.NET. ;-). -- Pozdrawiam, Łukasz 'Maly' Ostrowski. http://l3v.pl/
Re: Socket connection pomiędzy serwerem napisanym w Pythonie a klientem w C#
Author: rozrabiak
Date: Wed, 23 Nov 2011 14:47
Date: Wed, 23 Nov 2011 14:47
4 lines
1876 bytes
1876 bytes
Dziękuję za wskazówkę. Zainteresował mnie XML-RPC. Pogrzebałem w sieci poczytałem, ale nie mogę znaleźć sensownej odpowiedzi czy można i w jaki spobób zaimplementować w nim jakieś szyfrowanie. Bo to leci zwykłym tekstem z tego co wypatrzyłem, a to odpada bo będą tam leciały też dane osobowe.. Pozdrawiam Grzegorz
Re: Socket connection pomiędzy serwerem napisanym w Pythonie a klientem w C#
Author: Łukasz 'Maly' Ostrowski
Date: Wed, 23 Nov 2011 15:53
Date: Wed, 23 Nov 2011 15:53
14 lines
1621 bytes
1621 bytes
On Wed, 23 Nov 2011 06:47:25 -0800 (PST), rozrabiak wrote: > Dziękuję za wskazówkę. Zainteresował mnie XML-RPC. > Pogrzebałem w sieci poczytałem, ale nie mogę znaleźć > sensownej odpowiedzi czy można i w jaki spobób > zaimplementować w nim jakieś szyfrowanie. Bo to > leci zwykłym tekstem z tego co wypatrzyłem, a to > odpada bo będą tam leciały też dane osobowe.. Powinien wystarczyć endpoint https zamiast http. -- Pozdrawiam, Łukasz 'Maly' Ostrowski. http://l3v.pl/
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads