Article View: alt.pl.comp.lang.csharp
Article #22306Re: Socket connection pomiędzy serwerem napisanym w Pythonie a klientem w C#
From: Ł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/
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-mailReferences:
<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