Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.lang.visual-basic > #19142 > unrolled thread

Socket communication - come renderla asincrona

Started byRobertoA <amorosik@tiscalinet.it>
First post2017-09-13 16:22 +0200
Last post2017-09-14 19:12 +0200
Articles 3 — 2 participants

Back to article view | Back to it.comp.lang.visual-basic


Contents

  Socket communication - come renderla asincrona RobertoA <amorosik@tiscalinet.it> - 2017-09-13 16:22 +0200
    Re: Socket communication - come renderla asincrona Franz_aRTiglio <franzgol@N0SPAMtin.it> - 2017-09-13 17:55 +0200
      Re: Socket communication - come renderla asincrona RobertoA <amorosik@tiscalinet.it> - 2017-09-14 19:12 +0200

#19142 — Socket communication - come renderla asincrona

FromRobertoA <amorosik@tiscalinet.it>
Date2017-09-13 16:22 +0200
SubjectSocket communication - come renderla asincrona
Message-ID<opbe49$ptp$1@virtdiesel.mng.cu.mi.it>
Uso il seguente codice per un piccolo socket server (riceve comandi da 
terminali remoti):
-----------------------------------------------------------------
IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, 1234);
Socket sock = new Socket(AddressFamily.InterNetwork, 
SocketType.Stream,ProtocolType.IP);

sock.Bind(ipEnd);
sock.Listen(100);
Socket clientSock = sock.Accept();

byte[] clientData = new byte[1024 * 5000];
string receivedPath = "d:/";

int receivedBytesLen = clientSock.Receive(clientData);
int fileNameLen = BitConverter.ToInt32(clientData, 0);
string fileName = Encoding.ASCII.GetString(clientData, 4, fileNameLen);

BinaryWriter bWrite = new BinaryWriter(File.Open(receivedPath + 
fileName, FileMode.Append)); ;

bWrite.Write(clientData, 4 + fileNameLen, receivedBytesLen - 4 - 
fileNameLen);

bWrite.Close();
clientSock.Close();
-----------------------------------------------------------------

Quando arriva l'istruzione 'Socket clientSock = sock.Accept();' il 
flusso programma si blocca in attesa di nuovi caratteri sul canale 
appena aperto
Essendo in attesa da quel canale, il programma non reagisce piu' a 
qualsiasi stimolo, posso solo chiuderlo col task manager
Come fare per attivare la ricezione via socket, mantenendo la 
possibilita' di usare le altre funzioni sulla form (configurazione, 
uscita programma, help, ..) ?

[toc] | [next] | [standalone]


#19143

FromFranz_aRTiglio <franzgol@N0SPAMtin.it>
Date2017-09-13 17:55 +0200
Message-ID<opbkde$1d6c$1@gioia.aioe.org>
In reply to#19142
RobertoA ci ha detto :

> Uso il seguente codice per un piccolo socket server (riceve comandi da 
> terminali remoti):
> -----------------------------------------------------------------
> IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, 1234);

La porta 1234 e' usata da vari trojoni e backdoors, non mi stupirebbe
che l'antivirus stia fracassando i marroni.

> sock.Listen(100);

Perchè apri 100 sockets ? A memoria mia, sempre che io non stia facendo
confusione tra pere e banane (non conosco .net quindi vado a braccio),
windows XP sp3 accetta max 9 socket per applicazione (in ascolto, le
cosiddette half-open), mi sembra che questo limite sia stato mantenuto
anche successivamente per limitare i trojoni backdoors, prova a vedere
se aprendo meno sockets (magari parti da 5) il programma non 
s'inchioda.

[toc] | [prev] | [next] | [standalone]


#19144

FromRobertoA <amorosik@tiscalinet.it>
Date2017-09-14 19:12 +0200
Message-ID<opecgh$s1s$1@virtdiesel.mng.cu.mi.it>
In reply to#19143
Il 13/09/2017 17:55, Franz_aRTiglio ha scritto:
> RobertoA ci ha detto :
> 
>> Uso il seguente codice per un piccolo socket server (riceve comandi da 
>> terminali remoti):
>> -----------------------------------------------------------------
>> IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, 1234);
> 
> La porta 1234 e' usata da vari trojoni e backdoors, non mi stupirebbe
> che l'antivirus stia fracassando i marroni.
> 
>> sock.Listen(100);
> 
> Perchè apri 100 sockets ? A memoria mia, sempre che io non stia facendo
> confusione tra pere e banane (non conosco .net quindi vado a braccio),
> windows XP sp3 accetta max 9 socket per applicazione (in ascolto, le
> cosiddette half-open), mi sembra che questo limite sia stato mantenuto
> anche successivamente per limitare i trojoni backdoors, prova a vedere
> se aprendo meno sockets (magari parti da 5) il programma non s'inchioda.


Si la porta 1234 era tanto per scrivere qualcosa, non uso quella
I 100 sockets era perche' ho incollato un pezzo di codice per vedere se 
andava, poi e' rimasto cosi'
Ma comunque il punto non e' il numero di socket aperti ma la

Socket clientSock = sock.Accept();

che 'di suo' si ferma finche' ha ricevuto qualcosa
E quindi blocca il flusso del programma
Impedendo di accedere a qualsiasi altra funzionalita'
Addirittura spegnere la form dove gira quest codice e' impossibile 
perche' il programma e' in attesa che qualcuno mandi qualcosa sulla 
porta aperta
Sicuramente si potra' fare in altra maniera


[toc] | [prev] | [standalone]


Back to top | Article view | it.comp.lang.visual-basic


csiph-web