🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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#
#22305
Author: rozrabiak
Date: Fri, 18 Nov 2011 19:59
32 lines
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#
#22306
Author: Łukasz 'Maly' Ostrowski
Date: Mon, 21 Nov 2011 10:01
35 lines
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#
#22307
Author: rozrabiak
Date: Mon, 21 Nov 2011 21:45
10 lines
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#
#22308
Author: Robert Winkler
Date: Tue, 22 Nov 2011 10:00
29 lines
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#
#22312
Author: Paweł Kierski
Date: Tue, 22 Nov 2011 11:56
14 lines
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#
#22309
Author: Łukasz 'Maly' Ostrowski
Date: Tue, 22 Nov 2011 12:33
27 lines
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#
#22310
Author: rozrabiak
Date: Wed, 23 Nov 2011 14:47
4 lines
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#
#22311
Author: Łukasz 'Maly' Ostrowski
Date: Wed, 23 Nov 2011 15:53
14 lines
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