Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > it.comp.lang.visual-basic > #19142 > unrolled thread
| Started by | RobertoA <amorosik@tiscalinet.it> |
|---|---|
| First post | 2017-09-13 16:22 +0200 |
| Last post | 2017-09-14 19:12 +0200 |
| Articles | 3 — 2 participants |
Back to article view | Back to it.comp.lang.visual-basic
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
| From | RobertoA <amorosik@tiscalinet.it> |
|---|---|
| Date | 2017-09-13 16:22 +0200 |
| Subject | Socket 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]
| From | Franz_aRTiglio <franzgol@N0SPAMtin.it> |
|---|---|
| Date | 2017-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]
| From | RobertoA <amorosik@tiscalinet.it> |
|---|---|
| Date | 2017-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