🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.pl.comp.lang.csharp
Article #22306

Re: Socket connection pomiędzy serwerem napisanym w Pythonie a klientem w C#

#22306
From: Ł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/
Technical Details
Message-ID: <1vglxya0gd6um.aunqjwafak67$.dlg@40tude.net>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail
References: <8568702.2127.1321646380302.JavaMail.geo-discussion-forums@yqhd1>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail
From: Łukasz 'Maly' Ostrowski <maly@USUNnemo.pl>
Newsgroups: alt.pl.comp.lang.csharp
Subject: Re: Socket connection pomiędzy serwerem napisanym w
 Pythonie a klientem w C#
Date: Mon, 21 Nov 2011 11:01:54 +0100
Organization: Acme
Lines: 35
Message-ID: <1vglxya0gd6um.aunqjwafak67$.dlg@40tude.net>
References: <8568702.2127.1321646380302.JavaMail.geo-discussion-forums@yqhd1>
NNTP-Posting-Host: static-78-9-71-129.ssp.dialog.net.pl
Mime-Version: 1.0
X-Trace: news.dialog.net.pl 1321869737 19575 78.9.71.129 (21 Nov 2011 10:02:17 GMT)
X-Complaints-To: abuse@dialog.net.pl
NNTP-Posting-Date: Mon, 21 Nov 2011 10:02:17 +0000 (UTC)
User-Agent: 40tude_Dialog/2.0.15.1
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit