求助大家个UDP连接的简单问题.. ( 积分: 100 )

  • 主题发起人 主题发起人 happytimes_dsq
  • 开始时间 开始时间
H

happytimes_dsq

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序想和对方的一个C#的程序进行数据交换.用UDP协议,对方将数据通过写入MemoryStream广播出来.数据是定长的.
1.我想把它收下来显示出来.但是不行,我是按照delphi自带的例子copy的.为什么不行呢?
2.是不是对方广播只要指定端口,而我只要设置对应的端口,就可以对其收数据了吧,不需要它指定我的IP吗?因为对方就是直接对端口值为2000进行广播.并没指定我的IP.如果是的话,我要怎么做才能收到呢?
3.是不是对方是C#程序,我这边要做调整或是控件不好用要用别的呢?
例子中,自己收发就没有问题!
代码是这样的,其实大家都知道,还是贴出来吧!

procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
MyStream: TMemoryStream;
TmpStr: String;
begin
MyStream := TMemoryStream.Create;
try
NMUDP1.ReadStream(MyStream);
SetLength(TmpStr,NumberBytes);
MyStream.Read(TmpStr[1],NumberBytes);
Memo1.Lines.Add(TmpStr);
finally
MyStream.Free;
end;
end;

end.
 
我的程序想和对方的一个C#的程序进行数据交换.用UDP协议,对方将数据通过写入MemoryStream广播出来.数据是定长的.
1.我想把它收下来显示出来.但是不行,我是按照delphi自带的例子copy的.为什么不行呢?
2.是不是对方广播只要指定端口,而我只要设置对应的端口,就可以对其收数据了吧,不需要它指定我的IP吗?因为对方就是直接对端口值为2000进行广播.并没指定我的IP.如果是的话,我要怎么做才能收到呢?
3.是不是对方是C#程序,我这边要做调整或是控件不好用要用别的呢?
例子中,自己收发就没有问题!
代码是这样的,其实大家都知道,还是贴出来吧!

procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
MyStream: TMemoryStream;
TmpStr: String;
begin
MyStream := TMemoryStream.Create;
try
NMUDP1.ReadStream(MyStream);
SetLength(TmpStr,NumberBytes);
MyStream.Read(TmpStr[1],NumberBytes);
Memo1.Lines.Add(TmpStr);
finally
MyStream.Free;
end;
end;

end.
 
要有IP+port 才能
 
必须IP+端口才能唯一标识出一个用户
UDP也TCP也好都一样
把数据用指定端口发到广播地址
然后接收方绑定到指定的端口就应该能收到了
 
也就是说,对放广播给我要指定我的IP和端口,不能只对某个端口发送而不指定我的IP,对吧.然后我就只要绑顶对应的端口就应该能收到了吧.和对方是C#做的没关系吧?原理是一样的吧.只要他绑顶对了IP+PORT,用我的方法收到并显示是可以的吧.
 
我绑定了IP和PORT后,C#能和我的DELPHI连接了,也能受到.但都 是些乱码.那我要怎么样显示出他发的数据呢?是不是C#和DELPHI通过UDP连接,我这边还要做处理?我只是想正常显示.
 
广播是不需要指定IP的
 
多人接受答案了。
 
后退
顶部