Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-10-2003, 12:38   #1
djcuca
Senior Member
 
Iscritto dal: May 2003
Città: Taranto
Messaggi: 418
Acettare Id Tramite Autenticazione

salve ho un problema in vb cm sapete nn lo conosco bene cmq...
ho fatto un prog di file transfer tra due pc..
praticamente vorrei che il server quando ha la richiesta di connessione del client, accetta solo tramite un nome utente e password che il client deve dare...
cm devo fare?
__________________
11001010110011001010
djcuca è offline   Rispondi citando il messaggio o parte di esso
Old 07-10-2003, 12:51   #2
bsummer
Senior Member
 
L'Avatar di bsummer
 
Iscritto dal: Oct 2002
Messaggi: 487
Un modo molto semplice è...una volta accettata la connessione il programma che funge da server attende dei dati...i primi, che so, 32 byte rappresentano user è password dell'utente connesso. Li verifica e se sono ok, bene, altrimenti chiude la connessione...

Ho fatto anch'io recentemente un programma di questo tipo (scambio file tra 2 pc)...puoi dirmi che funzionalità hai inserito?

Aloha!
bsummer è offline   Rispondi citando il messaggio o parte di esso
Old 08-10-2003, 11:57   #3
djcuca
Senior Member
 
Iscritto dal: May 2003
Città: Taranto
Messaggi: 418
potresti darmi una mano per fare quello ke hai detto?

questo è il client:

Option Explicit

Dim buffer() As Byte
Dim lBytes As Long
Dim temp As String

Private Sub cmdBrowse_Click()
dlg.ShowOpen
txtFile = dlg.FileName
End Sub

Private Sub cmdSend_Click()
cmdSend.Enabled = False
lBytes = 0
ReDim buffer(FileLen(dlg.FileName) - 1)
Open dlg.FileName For Binary As 1
Get #1, 1, buffer
Close #1
Load wsTCP(1)
wsTCP(1).RemoteHost = txtIP
wsTCP(1).RemotePort = 999
wsTCP(1).Connect
lblStatus = "Connecting..."
End Sub



Private Sub wsTCP_Close(Index As Integer)
lblStatus = "Connection closed"
Unload wsTCP(1)
End Sub

Private Sub wsTCP_Connect(Index As Integer)
lblStatus = "Connected"

wsTCP(1).SendData dlg.FileTitle & vbCrLf
End Sub

Private Sub wsTCP_DataArrival(Index As Integer, ByVal bytesTotal As Long)
wsTCP(1).GetData temp
If InStr(temp, vbCrLf) <> 0 Then temp = Left(temp, InStr(temp, vbCrLf) - 1)
If temp = "OK" Then
wsTCP(1).SendData buffer
Else
lblStatus = "Something wrong"
Unload wsTCP(1)
cmdSend.Enabled = True
End If
End Sub

Private Sub wsTCP_SendComplete(Index As Integer)
If temp = "OK" Then
lblStatus = "Send complete"
temp = ""
Unload wsTCP(1)
cmdSend.Enabled = True
End If
End Sub

Private Sub wsTCP_SendProgress(Index As Integer, ByVal bytesSent As Long, ByVal bytesRemaining As Long)
If temp = "OK" Then
lBytes = lBytes + bytesSent
lblStatus = lBytes & " out of " & UBound(buffer) & " bytes sent"
End If
End Sub

e questo è il server:


Option Explicit

Dim lPos As Long
Dim bOK As Boolean
Dim fname As String

Private Sub cmdRun_Click()
If cmdRun.Caption = "Run" Then
cmdRun.Caption = "Stop"
wsTCP(0).LocalPort = 999
wsTCP(0).Listen
Else
wsTCP(0).Close
cmdRun.Caption = "Run"
End If
End Sub

Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive & "\"
End Sub




Private Sub wsTCP_Close(Index As Integer)
Close #1
Unload wsTCP(1)
bOK = False
End Sub

Private Sub wsTCP_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Load wsTCP(1)
wsTCP(1).Accept requestID
lblip = wsTCP(0).RemoteHostIP
lblhost = wsTCP(0).RemoteHost
End Sub

Private Sub wsTCP_DataArrival(Index As Integer, ByVal bytesTotal As Long)
If Not bOK Then
wsTCP(1).GetData fname
If InStr(fname, vbCrLf) <> 0 Then fname = Left(fname, InStr(fname, vbCrLf) - 1)
bOK = True
If Dir(Dir1.Path & "\" & fname) <> "" Then Kill Dir1.Path & "\" & fname
Open Dir1.Path & "\" & fname For Binary As 1
lPos = 1
wsTCP(1).SendData "OK" & vbCrLf
Else
Dim buffer() As Byte
wsTCP(1).GetData buffer
Put #1, lPos, buffer
lPos = lPos + UBound(buffer) + 1
End If
End Sub


grazie
__________________
11001010110011001010
djcuca è offline   Rispondi citando il messaggio o parte di esso
Old 08-10-2003, 18:22   #4
bsummer
Senior Member
 
L'Avatar di bsummer
 
Iscritto dal: Oct 2002
Messaggi: 487
Più che editare il tuo codice preferisco farti un esempio.

Definiamo un tipo di dati enumerativo:

Codice:
Private Enum LoginState
	verifyLogin = 0
	clientConnected = 1
	waitForConnect = 2
End Enum
e definiamo pure una variabile globale

dim serverState as LoginState

Quando inizializzi il server poni

serverState = waitForConnect

Quando nel server hai l'evento ConnectionRequest, all'interno di tale procedura fai l'assegnazione :

serverState = verifyLogin

Ed eccoci al cuore di tutto, la procedura dell'evento DataArrival

Codice:
Private Sub WinSock1_DataArrival(ByVal bytesTotal As Long)

	dim MyData

	with WinSock1
	select case serverState
		case verifylogin:
			if . BytesReceived < 32 then exit sub
			.GetData MyData, vbArray + vbByte, 32
			if checkLogin(MyData) = false then 
				.close
				serverState= waitForConnect
			else
				serverState= clientConnected
			end if

		case ClientConnected:
			.GetData MyData
			call useData(MyData)
		
	end select
	end with
End Sub

Private function checkLogin(MyData() as byte) as boolean
	' fai un controllo che i primi 16 byte corrispondano ad un nome di login conosciuto
	' e che i 16 byte successivi siano la password ad esso associata. Naturalmente puoi usare
	' anche meno bytes, che so, 16, 8 per la login e 8 per la passw. Se c'è un riscontro
	' positivo restituisci true, altrimenti false
end function

Private sub useData(myData)
	' Quando sei connesso utilizza i dati come meglio credi ;)
end Sub
Il tutto è molto semplice. All'inizio poni lo stato del server come non connesso ad alcun client. Quando un client chiede la connessione il server subito l'accetta, e passa il suo stato in verifica login...Qui attende i primi 32 bytes (ma puoi scegliere benissimo tu il formato della login/password) e appena li riceve (infatti nel caso arrivino meno di 32 byte la procedura termina senza fare nulla) chiama una funzione apposita (che dovrai crearti) che controlla se l'utente è tra quelli noti. Se si allora il server passa in modalità di trasferimento dati normale, se no il server chiude la connessione e ne attende una nuova.

Aloha!
bsummer è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Avio si prepara ai test del Dimostratore...
Space Pioneer ha annunciato le cause del...
Anthropic avrebbe nuovi antibiotici cont...
Scoperto un 'moltiplicatore nascosto' ne...
DREO: a IFA 2026 4 novità fra cui...
Slackbot genera dashboard e microsite de...
Idrogeno, nuova cella a combustibile rag...
Con la NASA fuori dai giochi, l'ESA risc...
Una falla di ChatGPT permette di estrapo...
Piano clima, 1,34 miliardi per il bonus ...
Porsche esce definitvamente da Bugatti R...
NVIDIA App aggiunge una delle funzioni p...
Come sarebbe il mondo se la luce viaggia...
Titanio, ceramica e zaffiro per HUAWEI W...
Taglio delle accise sul gasolio prorogat...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:25.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v