简单问题

独醒子 2011-05-30 04:59:49
有个 TIdUdpServer控件UdpS,两个个文本框控件edit1、edit2, 一个按钮控件bt 一个memo控件
写个程序实现以下功能:

fromcreate事件中开启udp控件,端口号为edit1中数值。

点击按钮给 ‘127.0.0.1’端口号为edit2内容发消息,消息内容为‘tttttt’。

udpS事件中将收到的消息在memo控件中显示出来。

程序在机器上执行2次,可以互相发送消息并显示出来

贴出

frmOncreate代码:
按钮代码:
udpS收到消息事件代码:

...全文
111 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
独醒子 2011-05-31
  • 打赏
  • 举报
回复
问题真诡异 有遇到的朋友告诉下问题所在。谢谢了

我把我客户端和服务端程序同时在台式机和笔记本上执行。

笔记本客户端给笔记本服务端发消息,报 stocket 10054错误
台式机客户端给台式机服务端发消息,正常
紧接着
笔记本客户端给台式机服务端发消息,正常
笔记本再次给笔记本服务端发消息,正常。

奇怪了。。。。。

现在没问题了 笔记本断开网络
重新运行程序 也完全正常了。
可我半句代码也没修改啊。
咋回事?
独醒子 2011-05-31
  • 打赏
  • 举报
回复
我源代码换了台机器(刚重装系统)
第一次执行报错错误也是这个,同时弹出了防火墙是否通过的窗口,点同意通过。

重新运行,一切正常。
奇怪了

我把原笔记本360以及xp上的防火墙全关闭。
错误依旧 咋回事?
dropme 2011-05-30
  • 打赏
  • 举报
回复
1. 不抱错可能是因为udp是无连接的,也不检测状态,它就像目标地址一发送就完事了,至于目标收没收到它是不管的;
2.10054的话:
a.检查下防火墙,端口开放没;
b.检查下端口,填对着没;
c.把127.0.0.1换成本机内网IP看行不;

再不行只能等高手啦~
山东蓝鸟贵薪 2011-05-30
  • 打赏
  • 举报
回复
没看明白,这是什么呀>>>>>>>>>>>>
独醒子 2011-05-30
  • 打赏
  • 举报
回复
对啊,我也是这样写的。我以前程序也是这样写的,不过不知怎么现在出问题了。
我贴代码来看:
procedure TForm1.udpSUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var str,tmp:string; //LoginPac: TLoginPac;
begin
try
//读取消息
AData.Seek(0,0);
SetLength(str,AData.size);
AData.Read(str[1],AData.Size);
msg.Text:=ABinding.PeerIP+'【'+inttostr(ABinding.PeerPort)+'】:'+str+#13+#10+msg.Text;
except
msg.Text:='监听错误'+#13+#10+msg.Text;
end;

end;

发送代码:
procedure TForm1.Button2Click(Sender: TObject);
begin
udpS.Send('127.0.0.1',strtoint(edit7.Text),'ETE'+edit1.Text)
end;

procedure TForm1.FormShow(Sender: TObject);
begin
udpS.Active:=false;
udpS.DefaultPort:=8765;
udpS.Active:=true;
end;

===========================================
发送消息时报 stocket 10054错误。

若ip地址换一个不存在的地址,比如192.168.1.93内网无此机器
则不报错。

啥问题
bdmh 2011-05-30
  • 打赏
  • 举报
回复

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer, StdCtrls,IdSocketHandle;

type
TForm1 = class(TForm)
Button1: TButton;
IdUDPServer1: TIdUDPServer;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
IdUDPServer1.Send('127.0.0.1',80,'abc');
end;

procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
begin
Memo1.Lines.LoadFromStream(AData);
end;

end.

bdmh 2011-05-30
  • 打赏
  • 举报
回复
IdUDPServer1.Send 发送
事件,OnUDPRead中的AData就是接受的数据

dropme 2011-05-30
  • 打赏
  • 举报
回复
看下indyudp的demo就行了呀。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧