我用NMUDP控件发送消息的代码如下:
procedure TFormMain.PopmenuMNUDP_SendMessageClick(Sender: TObject);
var
FStream: TMemoryStream;
strTemp:string;
begin
Form_SendMessage:=TForm_SendMessage.Create(Application);
Form_SendMessage.LB_Who.Caption:=iListItem.Caption;//接收人
Form_SendMessage.LB_Host.Caption:=iListItem.SubItems.Strings[2];//接收主机
Form_SendMessage.ShowModal;
if Form_SendMessage.FSend then
begin
FStream := TMemoryStream.Create;
strTemp:=iListItem.Caption+#1+iListItem.SubItems.Strings[2]
+#1+Form_SendMessage.Memo1.Text;
NMUDP.RemoteHost:=iListItem.SubItems.Strings[3];
try
FStream.Write(strTemp[1], Length(strTemp));
NMUDP.SendStream(FStream);
finally
FStream.Free;
end;
end;
Form_SendMessage.Free;
end;
procedure TFormMain.NMUDPDataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer); //接收即时消息
var
FStream: TMemoryStream;
strTemp:string;
i:integer;
begin
FStream := TMemoryStream.Create;
try
NMUDP.ReadStream(FStream);
SetLength(strTemp, NumberBytes);
FStream.Read(strTemp[1], NumberBytes);
Beep;
Form_ReceivedMessage:=TForm_ReceivedMessage.Create(Application);
Exit; i:=Pos(#1,strTemp);
Form_ReceivedMessage.LB_Who.Caption:=Copy(strTemp,1,i-1);//这里应该显示发送人的信息
strTemp:=Copy(strTemp,i+1,Length(strTemp));
i:=Pos(#1,strTemp);
Form_ReceivedMessage.LB_Host.Caption:=Copy(strTemp,1,i-1);
Form_ReceivedMessage.LB_Time.Caption:=DateTimeToStr(Now);
strTemp:=Copy(strTemp,i+1,Length(strTemp));
Form_ReceivedMessage.Memo1.Text:=strTemp;
Form_ReceivedMessage.ShowModal;
Form_ReceivedMessage.Free;
end;
finally
FStream.Free;
end;
end;问题出在接收消息的时候!!
在接收信息窗体发送人IP地址和发送人显示的是接受人姓名和接收人的IP,内容是正确的
不知道为什么!!但是接受内容的确是对的!!就好象接收的流读的信息不太正确!在线等等
procedure TFormMain.PopmenuMNUDP_SendMessageClick(Sender: TObject);
var
FStream: TMemoryStream;
strTemp:string;
begin
Form_SendMessage:=TForm_SendMessage.Create(Application);
Form_SendMessage.LB_Who.Caption:=iListItem.Caption;//接收人
Form_SendMessage.LB_Host.Caption:=iListItem.SubItems.Strings[2];//接收主机
Form_SendMessage.ShowModal;
if Form_SendMessage.FSend then
begin
FStream := TMemoryStream.Create;
strTemp:=iListItem.Caption+#1+iListItem.SubItems.Strings[2]
+#1+Form_SendMessage.Memo1.Text;
NMUDP.RemoteHost:=iListItem.SubItems.Strings[3];
try
FStream.Write(strTemp[1], Length(strTemp));
NMUDP.SendStream(FStream);
finally
FStream.Free;
end;
end;
Form_SendMessage.Free;
end;
procedure TFormMain.NMUDPDataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer); //接收即时消息
var
FStream: TMemoryStream;
strTemp:string;
i:integer;
begin
FStream := TMemoryStream.Create;
try
NMUDP.ReadStream(FStream);
SetLength(strTemp, NumberBytes);
FStream.Read(strTemp[1], NumberBytes);
Beep;
Form_ReceivedMessage:=TForm_ReceivedMessage.Create(Application);
Exit; i:=Pos(#1,strTemp);
Form_ReceivedMessage.LB_Who.Caption:=Copy(strTemp,1,i-1);//这里应该显示发送人的信息
strTemp:=Copy(strTemp,i+1,Length(strTemp));
i:=Pos(#1,strTemp);
Form_ReceivedMessage.LB_Host.Caption:=Copy(strTemp,1,i-1);
Form_ReceivedMessage.LB_Time.Caption:=DateTimeToStr(Now);
strTemp:=Copy(strTemp,i+1,Length(strTemp));
Form_ReceivedMessage.Memo1.Text:=strTemp;
Form_ReceivedMessage.ShowModal;
Form_ReceivedMessage.Free;
end;
finally
FStream.Free;
end;
end;问题出在接收消息的时候!!
在接收信息窗体发送人IP地址和发送人显示的是接受人姓名和接收人的IP,内容是正确的
不知道为什么!!但是接受内容的确是对的!!就好象接收的流读的信息不太正确!在线等等
解决方案 »
- 目前Indy正式发布的最新的版本到多少了?
- 想找一个控件,象Access里面左边那个(对象,组)的效果。
- TreeView控件的几个属性问题
- IdHttp组件为什么在window2003Server上工作不正常
- delphi程序的问题?
- 如何从一个一定记录格式的字符串中读出格式?
- 请问高手~~数据库问题
- 急急急 老大们救我!!!
- 如何用Delphi编写web service客户端 ?
- Delphi写的一个Windows服务程序,在服务中调用了dll 出现问题
- 关于开发年龄问题
- 强烈谴责清华紫光咨询事业部上海地区负责SAP的谭经理,不把程序员当人看,快和北京泰斯哒公司一样了,如果你还有一点良知,那就请进来骂
在这句前看下FStream.Position是不是为0,如果不是0的话,把它置成0(从开始处)再读