| Autor |
Beitrag |
fcg
      
Beiträge: 360
WinXP
D3 Prof, D6 Pers
|
Verfasst: So 25.07.04 13:32
Hallo
ich habe folgenden Code, an dem ich inzwischen fast verzweifle... Sinn des ganzen ists, das Bilder vom Client zum Server geschickt werden sollen!
Der Client zum Versenden eines Bildes
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85:
| program client;
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ScktComp, ExtCtrls, Jpeg;
{$R *.RES}
var ClientSocket: TClientSocket; FStream: TFileStream; Str: TMemoryStream;
procedure ScreenToFile(aFileName: string); var Bitmap: TBitmap; Jpeg : TJpegImage; Canvas: TCanvas; begin Canvas := TCanvas.Create; try Canvas.Handle := GetWindowDC(0); try Bitmap := TBitmap.Create; Jpeg := TJpegImage.Create; try Bitmap.Width := Screen.Width; Bitmap.Height:= Screen.Height; Bitmap.PixelFormat := pfDevice; BitBlt(Bitmap.Canvas.Handle, 0, 0, Pred(Screen.Width), Pred( Screen.Height), Canvas.Handle, 0, 0, Bitmap.Canvas.CopyMode); Jpeg.Assign(Bitmap); Jpeg.SaveToFile(aFileName); finally Bitmap.Free; Jpeg.free; end; finally ReleaseDC(0, Canvas.Handle); end; finally Canvas.Free; end; end;
procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); var i : Integer; begin end;
begin ClientSocket := TClientSocket.Create(nil); ClientSocket.Port := 305; ClientSocket.Host := 'xp-4lg0ndkjxkp7';
@ClientSocket.OnConnect := @ClientSocket1Connect; ClientSocket.Active := True;
while 30=30 do begin ScreenToFile(ExtractFilePath(Application.Exename)+'screen.jpg');
FStream := TFileStream.Create('C:\screen.jpg', fmOpenReadWrite); ClientSocket.Socket.SendStream(FStream); FStream.Free; sleep(5000); Application.ProcessMessages; end; end. |
und der Server zum enfangen
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, StdCtrls, ExtCtrls, jpeg, ShellAPI;
type TForm1 = class(TForm) ListBox1: TListBox; Image1: TImage; Label1: TLabel; Label2: TLabel; Timer1: TTimer; procedure ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure FormCreate(Sender: TObject); procedure GetNetwork; procedure Timer1Timer(Sender: TObject); private public end;
var Form1: TForm1; ServerSocket: TServerSocket; FStream: TFileStream; SizeOfFile: Integer; pBuffer: Pointer; AlreadyReceived: integer; FileStream: TFileStream; Buffer: array[0..4096] of Byte; SizeOfBuffer: integer;
implementation
{$R *.DFM} {$R xp.res}
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin FStream := TFileStream.Create('C:\server.jpg',fmopenread); end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var Buffer: array[0..8096] of Byte; SizeOfBuffer: integer; begin try pBuffer := @Buffer; SizeOfBuffer := Socket.ReceiveBuf(pBuffer^, 8096); FStream.Write(pBuffer^, SizeOfBuffer); Inc(AlreadyReceived, SizeOfBuffer); Socket.SendText(IntToStr(AlreadyReceived)); Application.ProcessMessages; finally end; end;
procedure TForm1.GetNetwork; Procedure Enum(h: THandle); Var I : Integer; nRes,cbBuf : Integer; he : THandle; Nr : Array [0..99] Of TNetResource; Begin nRes:=100; cbBuf:=Sizeof(Nr); FillChar(Nr,SizeOf(Nr),0); WNetEnumResource(h,nRes,@Nr,cbBuf); For I:=0 To nRes-1 Do Begin If (Nr[I].dwDisplayType In [RESOURCEDISPLAYTYPE_DOMAIN, RESOURCEDISPLAYTYPE_SERVER]) And Assigned(Nr[i].lpRemoteName) Then Listbox1.Items.Add(Nr[i].lpRemoteName); If Nr[i].dwDisplayType In [RESOURCEDISPLAYTYPE_NETWORK, RESOURCEDISPLAYTYPE_DOMAIN] Then Begin WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER,@Nr[I],he); Enum(he); WNetCloseEnum(he); End; End; End; Var he : THandle; Begin Listbox1.Items.Clear; WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, nil, he); Enum(he); WNetCloseEnum(he); end;
procedure TForm1.FormCreate(Sender: TObject); begin ServerSocket := TServerSocket.Create(Form1); ServerSocket.Port := 305; ServerSocket.Active := True;
ServerSocket.OnClientConnect := ServerSocket1ClientConnect; ServerSocket.OnClientRead := ServerSocket1ClientRead; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin end;
end. |
Die Datei die ankommt, is leider immer nur 0, höchstens 3kb groß. (Wenn sie ankommt!) Meißtens kommt aber folgende Fehlermeldung:
Quelltext 1:
| Zugriffsverletzung bei Adresse 008A2C9B. Schreiben von Adresse7FFD0001 |
 Nur ich hab kein Plan warum...
fcg
_________________ .: Wer für alles offen ist, kann nicht ganz dicht sein! :.
|
|
Muetze1
      
Beiträge: 346
|
Verfasst: So 25.07.04 16:09
Moin!
Eine Sache schonmal, die mir so beim überfliegen aufgefallen ist:
Beim Client setzt du das OnConnect Ereignis auf deine Procedure, die aber keine Methode eines Objectes ist, sondern eine normale Procedure und somit fehlt ihr der unsichtbare Self Parameter den sie mit übergeben bekommt. Ergo: Der reine Stackaufbau beim Eintritt in die Procedure dürfte arg im argen liegen  . Im Normalfall musst du immer eine Methode bei einem Ereignis zuweisen. Diese Typ-Inkompatiblität hast du ja einfach durch die Arbeit mit Adressen umgangen - wenn du es ohne die @'s schreibst, dann verweigert Delphi nicht umsonst die Zuweisung mit einer Meldung (Inkompatiblität zwischen Objektmethode und Procedure - o.ä.)
MfG
Muetze1
|
|
|