Entwickler-Ecke
Internet / Netzwerk - Indy IRC + Datei empfangen und versenden.
Waterball - Di 24.02.09 09:07
Titel: Indy IRC + Datei empfangen und versenden.
Hallo...
ich sitze jetzt seid Stunden vor dem problem das ich mit Indy keine Dateien empfangen oder senden kann.
Delphi-Quelltext
1:
| IdIRC1.SendCmd('PRIVMSG '+ANick+' :'+#1+'DCC ACCEPT '+AFileName+' '+LongIP(IP)+' '+APort+' '+AFileSize+#1); |
Selbst damit, merkt "mIRC" nicht das ich den empfang der Datei möchte.
Ich habe schon versucht VIA IdTCPClient es zu realisieren, leider bin ich auch daran gescheitert...
Hat vllt jemand eine Idee...? oder vllt sogar ein Beispielt...?
Ich wäre euch sehr verbunden...
MfG
Waterball
Moderiert von
Narses: Highlight- durch Delphi-Tags ersetzt
Xentar - Di 24.02.09 11:57
Wo hast du denn den Aufbau, den du da sendest, her? Sicher, dass dieser korrekt ist?
Waterball - Di 24.02.09 19:00
Das habe ich in einer IRC Wiki gefunden....
Und ja, soweit ich es sehen konnte war dieser Korrekt. Habe auch ein paar OpenSource Programme gefunden die funktionieren und wo dieser Teil auch klappt...
Soweit klappt alles... mein Programm merkt das jemand nen DCC senden will...
Aber sobald ich empfange das es jemand machen möchte, laggt das programm ein wenig. Aber passieren tut nichts :(
MfG
Waterball
Xentar - Di 24.02.09 20:09
Waterball hat folgendes geschrieben : |
Soweit klappt alles... mein Programm merkt das jemand nen DCC senden will...
Aber sobald ich empfange das es jemand machen möchte, laggt das programm ein wenig. Aber passieren tut nichts :( |
Was soll denn auch passieren? Mit obigem Quellcode sagst du doch nur, dass du die Datei akzeptierst.. aber abspeichern o.ä. tust du die mit dieser einen Zeile wohl nicht.
Wo hast du den Code überhaupt stehen?
Waterball - Di 24.02.09 21:05
Den Code habe ich im teil, wo Indy merkt, das eine Datei ankommen möchte...
Aber nicht einmal das akzeptieren geht... die gegenseite bekommt nicht mit, das der Datei empfang stattfinden soll...
mfg
Waterball
DennisHB - Do 05.03.09 00:15
Moin,
stand vor dem selben Problem...
hab darauf hin nen kleinen Thread zusammen gefrickelt der zumindest bei mir local (Server:InspiRCd + Sender:mIRC) funktioniert (Empfänger:Indy 9)
online ist das ganze noch nicht getestet... da ich an einigen stellen noch zu tun habe und ich keinem zumuten möchte nen "defekten" IRC-Client auf seinem Server zu haben.
Das ganze ist eher Beta, wenn nicht Alpha... aber ich denke es gibt nen kleinen Gedankenschub in die richtige Richtung.
Aufruf:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.ClientDCCSend(Sender: TObject; ANick, AIp, APort, AFileName, AFileSize: string); var reciveThread : TmyIRCdccReceive; begin ... reciveThread := TmyIRCdccReceive.Create(AIp, APort, AFileName, AFileSize); reciveThread.DownloadDir := 'D:\Downloads\'; reciveThread.FreeOnTerminate := true; reciveThread.OnConnected := ClientConnect; reciveThread.OnDisconnected := ClientDisconnected; reciveThread.OnStatus := ClientStatus; reciveThread.OnWork := tcpWork; reciveThread.OnWorkBegin := tcpWorkBegin; reciveThread.OnWorkEnd := tcpWorkEnd;
reciveThread.Resume; end; |
Edit : hmm Dateianhang mag mich nicht:
Delphi-Quelltext
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: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190:
| unit threadMyIRCdccReceive;
interface
uses IdTCPClient, IdComponent,
Classes, SysUtils;
type TmyIRCdccReceive = class(TThread) private tcp: TIdTCPClient; FDownloadDir: string; FFileName: string; FExpectedFileSize: Int64;
fTCPStatus: TIDStatus; fTCPStatusText: string; fTCPWorkMode: TWorkMode; fTCPWorkCount: Integer; fTCPWorkCountMax: Integer;
FOnWorkBegin: TWorkBeginEvent; FOnWorkEnd: TWorkEndEvent; FOnWork: TWorkEvent; FOnStatus: TIdStatusEvent; FOnDisconnected: TNotifyEvent; FOnConnected: TNotifyEvent;
procedure SetDownloadDir(const Value: string);
procedure DoTCPConnected(Sender: TObject); procedure DoTCPDisconnected(Sender: TObject); procedure DoTCPWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); procedure DoTCPWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer); procedure DoTCPWorkEnd(Sender: TObject; AWorkMode: TWorkMode); procedure DoTCPStatus(ASender: TObject; const AStatus: TIdStatus; const AStatusText: string); protected procedure Execute; override;
procedure syncTCPConnect; procedure syncTCPDisconnect; procedure syncTCPStatus; procedure syncTCPWork; procedure syncTCPWorkBegin; procedure syncTCPWorkEnd; public
property DownloadDir: string read FDownloadDir write SetDownloadDir; property FileName: string read FFileName write FFileName;
property OnConnected: TNotifyEvent read FOnConnected write FOnConnected; property OnDisconnected: TNotifyEvent read FOnDisconnected write FOnDisconnected; property OnStatus: TIdStatusEvent read FOnStatus write FOnStatus; property OnWork: TWorkEvent read FOnWork write FOnWork; property OnWorkBegin: TWorkBeginEvent read FOnWorkBegin write FOnWorkBegin; property OnWorkEnd: TWorkEndEvent read FOnWorkEnd write FOnWorkEnd;
constructor Create(AIp, APort, AFileName, AFileSize: string); end;
implementation
constructor TmyIRCdccReceive.Create(AIp, APort, AFileName, AFileSize: string); begin inherited Create(true);
FExpectedFileSize := StrToInt(AFileSize);
tcp := TidTCPClient.Create(nil); tcp.Host := AIp; tcp.Port := StrToInt(APort); tcp.OnConnected := DoTCPConnected; tcp.OnDisconnected := DoTCPDisconnected; tcp.OnWork := DoTCPWork; tcp.OnWorkBegin := DoTCPWorkBegin; tcp.OnWorkEnd := DoTCPWorkEnd; tcp.OnStatus := DoTCPStatus;
FFileName := AFileName; end;
procedure TmyIRCdccReceive.DoTCPConnected(Sender: TObject); begin Synchronize(syncTCPConnect); end;
procedure TmyIRCdccReceive.DoTCPDisconnected(Sender: TObject); begin Synchronize(syncTCPDisconnect); end;
procedure TmyIRCdccReceive.DoTCPStatus(ASender: TObject; const AStatus: TIdStatus; const AStatusText: string); begin fTCPStatus := AStatus; fTCPStatusText := AStatusText; Synchronize(syncTCPStatus); end;
procedure TmyIRCdccReceive.DoTCPWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); begin fTCPWorkMode := AWorkMode; fTCPWorkCount := AWorkCount; Synchronize(syncTCPWork); end;
procedure TmyIRCdccReceive.DoTCPWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer); begin fTCPWorkMode := AWorkMode; fTCPWorkCountMax := AWorkCountMax; Synchronize(syncTCPWorkBegin); end;
procedure TmyIRCdccReceive.DoTCPWorkEnd(Sender: TObject; AWorkMode: TWorkMode); begin fTCPWorkMode := AWorkMode; Synchronize(syncTCPWorkEnd); end;
procedure TmyIRCdccReceive.Execute; var AFileStream : TFileStream; streamSize : Int64; begin AFileStream := TFileStream.Create(FFileName, fmCreate); tcp.Connect(); streamSize := 0; tcp.ReadStream(AFileStream, FExpectedFileSize, false); tcp.Disconnect; AFileStream.Free; end;
procedure TmyIRCdccReceive.SetDownloadDir(const Value: string); begin FDownloadDir := Value; FFileName := ExtractFilePath(FDownloadDir) + ExtractFileName(FFileName); end;
procedure TmyIRCdccReceive.syncTCPConnect; begin if assigned(FOnConnected) then begin FOnConnected(tcp); end; end;
procedure TmyIRCdccReceive.syncTCPDisconnect; begin if assigned(FOnDisconnected) then begin FOnDisconnected(tcp); end; end;
procedure TmyIRCdccReceive.syncTCPStatus; begin if assigned(FOnStatus) then begin FOnStatus(tcp, fTCPStatus, fTCPStatusText); end; end;
procedure TmyIRCdccReceive.syncTCPWork; begin if assigned(FOnWork) then begin FOnWork(tcp, fTCPWorkMode, fTCPWorkCount); end; end;
procedure TmyIRCdccReceive.syncTCPWorkBegin; begin if assigned(FOnWorkBegin) then begin FOnWorkBegin(tcp, fTCPWorkMode, fTCPWorkCountMax); end; end;
procedure TmyIRCdccReceive.syncTCPWorkEnd; begin if assigned(FOnWorkEnd) then begin FOnWorkEnd(tcp, fTCPWorkMode); end; end;
end. |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!