我用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,内容是正确的
不知道为什么!!但是接受内容的确是对的!!就好象接收的流读的信息不太正确!在线等等
解决方案 »
- trackbar可以竖着放吗
- 如何动态获取actionmanger里每个action的caption值
- [新]:如何让webbrower控件能选择本地IP及Cookie位置浏览网页
- 奇怪的访问冲突,各位帮忙看看
- 怎么实现将DBGrid中的内容用报表显示出来?
- 高手帮忙!!!程序内怎样获得MSSQLSERVER数据库的错误代码????
- 如何显示TImage与TImageList的图象属性对话框
- 如何生成单机运行的EXE文件?
- activeform 中调用报表QuickReport报错,帮忙看看,100分相送
- 有关DCOM应用的问题
- 关于开发年龄问题
- 强烈谴责清华紫光咨询事业部上海地区负责SAP的谭经理,不把程序员当人看,快和北京泰斯哒公司一样了,如果你还有一点良知,那就请进来骂
在这句前看下FStream.Position是不是为0,如果不是0的话,把它置成0(从开始处)再读