想写一个类实现客户端向服务器发送/接收消息,其中包括客户端的主机IP,主机名,发送/接收消息的时间等信息.
现在定义了两个procedure: SendMsg(AMsg: string); ReceiveMsg(AMsg: string);
想用TIdTcpClient/Server或TTcpClient/Server来实现,但我刚刚接触delphi,感觉一头雾水的,不知道怎么用这些,还请高手指点.别见笑!呵呵
现在定义了两个procedure: SendMsg(AMsg: string); ReceiveMsg(AMsg: string);
想用TIdTcpClient/Server或TTcpClient/Server来实现,但我刚刚接触delphi,感觉一头雾水的,不知道怎么用这些,还请高手指点.别见笑!呵呵
解决方案 »
- DELPHI引用其它单元
- FormStyle设置成fsMDIchild后,form.query1.close出错
- delphi 开发 directshow 视频采集 如何设置尺寸
- 急需数据操作的一套图标
- 请问:sql语句中where条件变量中存在字符 ',如何处理这个便量?
- Delphi的IDE
- 请问DBLJ.DB是一个什么类型的表,是缺省表吗
- 如何实现listbox的一下功能
- 高手帮忙,为什么不能insert/delete?先谢了。
- 有谁做过档案管理系统?希望大家讨论关于档案借阅的有关处理。(来的都是客,全在分数上,参与讨论者有分)
- 用findfirst查找文件怎样才能让它得到的结果 按文件名排列的呢??
- 如何使txt文件转换成bmp文件?
服务端:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
iFileHandle:integer;
iFileLen,cnt:integer;
buf:array[0..4096] of byte;
begin
iFileHandle:=FileOpen('E:\setup\qq2004sp1.exe',fmOpenRead);
iFileLen:=FileSeek(iFileHandle,0,2);
FileSeek(iFileHandle,0,0);
AThread.Connection.WriteInteger(iFileLen);
while true do
begin
cnt:=FileRead(iFileHandle,buf,4096);
AThread.Connection.WriteBuffer(buf,cnt);
if cnt<4096 then
break;
end;
FileClose(iFileHandle);
end;客户端:
procedure TForm1.Button1Click(Sender: TObject);
var
rbyte:array[0..4096] of byte;
sFile:TFileStream;
iFileSize:integer;
begin
try
IdTcpClient1.Connect(5000);
except
exit;
end; iFileSize:=IdTCPClient1.ReadInteger; sFile:=TFileStream.Create('e:\bb.tmp',fmCreate);
While iFileSize>4096 do
begin
IdTCPClient1.ReadBuffer(rbyte,4096);// .ReadBuffer(rbyte,iLen);
sFile.Write(rByte,4096);
inc(iFileSize,-4096);
end;
IdTCPClient1.ReadBuffer(rbyte,iFileSize);// .ReadBuffer(rbyte,iLen);
sFile.Write(rByte,iFileSize);
sFile.Free;
ShowMessage('file get ok!');
end;
当向server传送消息时,SendMessage(AMsg:String)这个方法,在一个参数AMsg的情况下,能把那些IP,Name等传给server吗?要能的话,该怎样去实现呢?是不是要多几个参数出来?
说明:这些方法不是我定义的,挺茫然。我很菜,所以要向高手请教,不胜感激!!!
譬如下面的格式:
***.***.***.**;name;info
接收信息的时候,分析一下就能够得到信息了。不过没必要的。接收的时候能够得到源地址的。
问一下,怎么在接收的时候得到源地址IP?