()
Newbie
Messaggi:
Iscritto:
|
eccomi qua' con un ritardo mostruoso.....
ho ripescato dal mio hd questo programma, non ho potuto riptovarlo perche' non possiedo piu' la webcam, pero' funzionava a suo tempo.....
l'invio dei file viene fatto in maniera molto semplicistica, in quanto i chunk vengono inviati in sequenza, senza attendere che dalla controparte arrivi il messaggio di chunk ricevuto e quindi la richiesta di invio del chunk sucessivo.....
io a suo tempo lo ho implementato su una chat, spero ti possa aiutare.....
ti scrivo il codice perche' non mi accetta l'allegato vuole winzip ed io non lo ho....
dalla parte di chi riceve (il server)
l'unica cosa da considerare e' che nella picturebox che crei devi impostare la proprieta' autoredraw = true
Codice sorgente - presumibilmente VB.NET |
Dim iData As String Private Sub Form_Load() Form1.Visible = True Winsock.Listen End Sub Private Sub Winsock_ConnectionRequest(ByVal requestID As Long) If Winsock.State <> sckClosed Then Winsock.Close Winsock.Accept requestID End Sub Private Sub Winsock_DataArrival(ByVal bytesTotal As Long) Dim data As String Dim data2 As String Dim datafiler As String Winsock.GetData data If Split(data, "/-/")(1 - 1) = "file" Then 'Open App.Path & "\" & "\file ricevuti" & "\" & Split(data, "/-/")(2 - 1) For Binary As #1 'Put #1, , Split(data, "/-/")(4 - 1) 'Close (1) If Split(data, "/-/")(2 - 1) = "titolo" Then Open App.Path & "\" & Split(data, "/-/")(3 - 1) For Binary Access Write As #2 ElseIf Split(data, "/-/")(2 - 1) = "inizio" Then datafiler = Split(data, "/-/")(3 - 1) Put 2, , datafiler ElseIf Split(data, "/-/")(2 - 1) = "fine" Then Close #2 Image1.Picture = LoadPicture(App.Path & "\temp.bmp") End If End If End Sub
|
dalla parte di chi invia (il client)
Codice sorgente - presumibilmente VB.NET |
Option Explicit Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowA" (ByVal WindowName As String, ByVal Style As Long, ByVal X As Long, ByVal Y As Long, ByVal Width As Long, ByVal Height As Long, ByVal Parent As Long, ByVal ID As Long) As Long Dim webcam As Long Dim webcamview As Boolean Dim tail As Long Dim chunk As Long Dim datafile As String Private Sub Command1_Click() Winsock2.Connect "127.0.0.1", 12666 End Sub Private Sub winsock2_Connect() webcam = capCreateCaptureWindow("webcam", 0, 0, 0, 320, 240, Me.hwnd, 0) DoEvents Call SendMessage(webcam, 1034, 0, 0) Timer1.Enabled = True End Sub Private Sub Timer1_Timer() On Error Resume Next SendMessage webcam, 1084, 0, 0 SendMessage webcam, 1054, 0, 0 Picture1.Picture = Clipboard.GetData Clipboard.Clear Call Picture1.PaintPicture(Picture1.Picture, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight) SavePicture Picture1.Image, App.Path & "\webcam" & "\temp.bmp" On Error GoTo 1 file = App. Path & "\webcam" & "\temp.bmp" Open file For Binary Access Read As # 1 Winsock2.SendData "file/-/" & "titolo" & "/-/" & "\temp.bmp" DoEvents chunk = 4000 ' secondo i consgli di marcostraf non impostiamo ad' ' 8000 i pacchetti potrebbero non arrivare' Do While Not EOF(1) datafile = Space$(chunk) ' mi vedo costretto ad usare la funzione space, ' attendo consigli su come poterla levare' Get 1, , datafile ' mi vedo costretto ad aggiungere una variabile , infatti ' get non accetta binari' Winsock2.SendData "file/-/" & "inizio/-/" & datafile DoEvents Loop Winsock2.SendData "file/-/" & "fine/-/" Close #1 1: Exit Sub End Sub Private Sub Winsock2_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) MsgBox "problemi di connessione" Winsock2.Close Timer1.Enabled = False End Sub
|
Ultima modifica effettuata da il 07/03/2009 alle 17:07 |