Chirurgia cranio-cerebrală minim invazivă
Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne. Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale. www.neurohope.ro |
winsock control
Last Updated: Nov 14 2008 17:36, Started by
din suuk
, Nov 10 2008 09:52
·
0
#1
Posted 10 November 2008 - 09:52
salut. vreau sa fac o aplicatie care sa functioneze in felul urmator:
- aplicatia o sa ruleze pe fiecare calculator din reteaua din birou; cand cineva apasa un buton, aplicatia trebuie sa trimita o comanda la toate ip-urile din lista. - pentru asta, am facut cate un control winsock pentru fiecare ip din lista, care cauta intr-un timer ip-ul asociat si incearca sa se conecteze. - la fiecare request de conectare, creez un winsock nou care sa accepte conexiunea (care vine de la winsock-urile care incearca sa se conecteze, din celelalte aplicatii). astfel, as putea sa trimit comanda prin socket-urile de conectare sau prin cele care asculta portul... cand un socket gaseste ip-ul si se conecteaza, trimite numele calculatorului, care va fi pus intr-o lista a calculatoarelor conectate. toate bune si frumoase.. problema e urmatoarea: am incercat cu 2 calculatoare. pe unul imi trimite numele calculatorului vecin, dar pe celalalt nu. probabil unul din calculatoare reuseste sa se conecteze, dar celalalt nu. oare nu pot exista 2 conexiuni pe acelasi canal? sau unde apare problema? va rog sa-mi raspundeti daca aveti vreo idee.. |
#2
Posted 10 November 2008 - 10:05
pune ceva cod. cu siguranta ai gresit ceva pe undeva.
|
#3
Posted 10 November 2008 - 12:16
din suuk, on Nov 10 2008, 10:52, said: salut. vreau sa fac o aplicatie care sa functioneze in felul urmator: - aplicatia o sa ruleze pe fiecare calculator din reteaua din birou; cand cineva apasa un buton, aplicatia trebuie sa trimita o comanda la toate ip-urile din lista. - pentru asta, am facut cate un control winsock pentru fiecare ip din lista, care cauta intr-un timer ip-ul asociat si incearca sa se conecteze. - la fiecare request de conectare, creez un winsock nou care sa accepte conexiunea (care vine de la winsock-urile care incearca sa se conecteze, din celelalte aplicatii). astfel, as putea sa trimit comanda prin socket-urile de conectare sau prin cele care asculta portul... cand un socket gaseste ip-ul si se conecteaza, trimite numele calculatorului, care va fi pus intr-o lista a calculatoarelor conectate. toate bune si frumoase.. problema e urmatoarea: am incercat cu 2 calculatoare. pe unul imi trimite numele calculatorului vecin, dar pe celalalt nu. probabil unul din calculatoare reuseste sa se conecteze, dar celalalt nu. oare nu pot exista 2 conexiuni pe acelasi canal? sau unde apare problema? va rog sa-mi raspundeti daca aveti vreo idee.. Cum trimiți numele calculatorului de la client la server? Ai un protocol de comunicație definit? Presupun că folosești senddata/getdata. VB6? Edited by Marlo, 10 November 2008 - 12:18. |
#4
Posted 10 November 2008 - 22:45
Foloseste UDP in loc de TCP. E conectionless, deci nu ai nevoie de Listen si Accept si Close (inclin sa cred ca nu faci Close si d-asta nu-ti merge). Trimiti datele pe un port prestabilit si trimiti mai apoi confirmarea de primire la sender, pe un alt port (sau chiar pe acelasi).
|
#5
Posted 12 November 2008 - 12:54
aici e timerul in care se acceseaza ip-urile din lista:
Private Sub tmrFind_Timer() 'accesez pe rand adresele din lista si incerc sa ma conectez For i = 1 To UBound(LISTA_IP) If Not sockFind(i).State = sckConnected Then sockFind(i).Close If LISTA_IP(i) <> sockListen(0).LocalIP Then sockFind(i).Connect LISTA_IP(i), 5581 End If Next i End Sub iar aici se accepta conexiunile venind de la celelalte computere, care incearca sa se conecteze Private Sub sockListen_ConnectionRequest(Index As Integer, ByVal requestID As Long) 'cand se cere conexiune, creez un nou socket si accept conexiunea Load sockListen(sockListen.count) sockListen(sockListen.count - 1).Accept requestID End Sub trimit numele computerului local cand se conecteaza, pt a aparea in lista celuilalt Private Sub sockFind_Connect(Index As Integer) sockFind(Index).SendData "numecomp|" & NumeComp End Sub iar aici primesc numele compului Private Sub sockFind_DataArrival(Index As Integer, ByVal bytesTotal As Long) Dim GetIt As String Dim msg() As String sockFind(Index).GetData GetIt msg = Split(GetIt, "|") Select Case msg(0) Case "numecomp": lstComputere.AddItem msg(1) & Space(100) & Index End Select End Sub Nu stiu ce presupune protocolul udp, nu l-am folosit niciodata. nu functioneaza pe acelasi principiu?? |
#6
Posted 12 November 2008 - 23:32
Ceea ce incerc eu sa spun este ca poti schimba protocolul folosit de controlul winsock. Anume, seteaza Winsock.Protocol = sckUDPProtocol si in acest mode nu mai ai nevoie de stabilirea unei conexiuni (de asta UDP este conectionless). Deci, nu mai trebuie sa preiei conexiuni, sa le accepti si sa asculti la porturi. Pur si simplu instantiezi winsock-ul la modul:
With Winsock .RemoteHost= "Name" .RemotePort = xyz .Bind NumarPort End With Asta nu face altceva decat sa-ti aloce local portul NumarPort, pe care urmeaza sa primesti date cu .GetData (la eventul DataArrival, intr-un string sau un byte array) si instruieste winsockul sa trimita datele inapoi la hostul "Name" (sau IPul cutare) pe portul remote xyz, cu .SendData. E mai facil sa folosesti UDP, daca nu esti prea preocupat de siguranta transmiterii (totusi, poti folosi reply-uri de confirmare a primirii). Edited by Bean, 12 November 2008 - 23:38. |
#7
Posted 12 November 2008 - 23:42
pentru tcp nu e nevoie sa scrii decat vreo 20 de linii in plus... dar ai siguranta transmiterii mesajelor . la nivel udp , chiar daca e mai simplu de scris, nu ai garantia ca pachetele sosesc in ordinea trimiterii sau daca ele mai ajung la destinatie . Practic : de cate ori am lucrat cu udp, nu prea am pierdut pachete.... si au venit si in ordine. Insa teoria asa spune : ca se pot pierde si mai rau, primi in alta ordine . Mergi pe TCP
|
#8
Posted 12 November 2008 - 23:47
msmihai, on Nov 12 2008, 23:42, said: pentru tcp nu e nevoie sa scrii decat vreo 20 de linii in plus... dar ai siguranta transmiterii mesajelor . la nivel udp , chiar daca e mai simplu de scris, nu ai garantia ca pachetele sosesc in ordinea trimiterii sau daca ele mai ajung la destinatie . Practic : de cate ori am lucrat cu udp, nu prea am pierdut pachete.... si au venit si in ordine. Insa teoria asa spune : ca se pot pierde si mai rau, primi in alta ordine . Mergi pe TCP @din suuk Cand vrei sa trimiti la mai multe hosturi, faci un For in care inserezi si RemoteHost= "Name" sau IP (pe care evident il schimbi la fiecare iteratie), dai SendData si tot asa. Edited by Bean, 12 November 2008 - 23:50. |
#9
Posted 13 November 2008 - 08:33
am citit intre timp despre udp. n-ar fi problema, transmit comenzi foarte scurte. dar ideea era sa introduc in lista computerele pe care le gasesc pornite. asta s-ar putea face, trimit la toate adresele o interogare si care imi raspund, trimit numele si le introduc in lista. dar aplicatia trebuie sa ruleze pe 4-5 compuri si de pe fiecare comp sa pot primi comanda de la unul sau mai multe dintre ele. in cazul asta, ar trebui probabil sa aloc un port pentru fiecare comp in parte? pe cand pe tcp folosesc acelasi port pe fiecare computer...
Edited by din suuk, 13 November 2008 - 08:39. |
#10
Posted 14 November 2008 - 00:22
din suuk, on Nov 13 2008, 08:33, said: am citit intre timp despre udp. n-ar fi problema, transmit comenzi foarte scurte. dar ideea era sa introduc in lista computerele pe care le gasesc pornite. asta s-ar putea face, trimit la toate adresele o interogare si care imi raspund, trimit numele si le introduc in lista. dar aplicatia trebuie sa ruleze pe 4-5 compuri si de pe fiecare comp sa pot primi comanda de la unul sau mai multe dintre ele. in cazul asta, ar trebui probabil sa aloc un port pentru fiecare comp in parte? pe cand pe tcp folosesc acelasi port pe fiecare computer... |
|
#11
Posted 14 November 2008 - 08:39
ok, o sa incerc. kiar k nu pare greu
ms mult pentru ajutor baieti! raman dator |
#12
Posted 14 November 2008 - 16:36
#13
Posted 14 November 2008 - 17:36
konami, on Nov 14 2008, 16:36, said: daca trimiti pachetul la adresa de broadcast, ar trebui sa-l accepte orice calculator din retea, nu ? |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users