c# udp协议 服务器端 如何获得 远程发来包的ip

myleeable2010 2010-01-14 04:00:13

c# 用UdpClient建立的udp 链接,服务器端如果获得远程客户端ip地址?
有没有自动获取ip的函数?
...全文
812 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
asight 2010-07-24
  • 打赏
  • 举报
回复
顺便问下高人,我用UDP怎么从来没出现过端口占用的情况啊,80 8080 4001 4002这些有名的端口我都试了,根本没出现端口占用的问题出现,怎么办啊,我急啊,不出现问题,我就没办法了,自动端口复用?这样安全不?
asight 2010-07-24
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 cqsfd 的回复:]
刚给你查了下
ReceivePort.Address 就是你要的ip地址
这种不是很难的东西 最好还是自己先努力一下
[/Quote]
谢谢好人,我找的累啊,google.com上搜,看e文都快看瞎了,一帮老外也不知道有这个东西。
asight 2010-07-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wsxqaz 的回复:]

引用 5 楼 myleeable2010 的回复:

上面都是接收数据的语句;
怎么能够得到远程机器的ip呢?


IPEndPoint groupEP = new IPEndPoint(IPAddress.Any,this._port);
byte[] bytes = this._listener.Receive(ref groupEP);
[/Quote]
可是这groupEP是废柴,什么信息都没,IPAddress.Any 有什么用啊,LZ要的是Remote IP,你给个端口过来什么意思啊
wsxqaz 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 myleeable2010 的回复:]

上面都是接收数据的语句;
怎么能够得到远程机器的ip呢?
[/Quote]

IPEndPoint groupEP = new IPEndPoint(IPAddress.Any,this._port);
byte[] bytes = this._listener.Receive(ref groupEP);
myleeable2010 2010-01-15
  • 打赏
  • 举报
回复
好人啊。
问题解决了
cqsfd 2010-01-15
  • 打赏
  • 举报
回复
刚给你查了下
ReceivePort.Address 就是你要的ip地址
这种不是很难的东西 最好还是自己先努力一下
cqsfd 2010-01-15
  • 打赏
  • 举报
回复
刚给你查了下
ReceivePort.Address 就是你要的ip地址
这种不是很难的东西 最好还是自己先努力一下
cqsfd 2010-01-15
  • 打赏
  • 举报
回复
需求很奇怪
办法很多的
没时间帮你查具体的API了,你可以自己上网搜的,这个不是什么大问题,自己查到的,有助于增强自信心哦!毕竟大多数时候要靠自己
也可以用笨办法,把你的这个ReceivePort转化为字符串.ToString() 观察形式 通过字符串截取提取自己需要的部分
myleeable2010 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 myleeable2010 的回复:]
引用 10 楼 xuzysun 的回复:
调用下面这句
byte[] bytes = this._listener.Receive(ref groupEP);
后,groupEP已包含了远程客户端ip地址和端口


关键的代码是解决了。问题是,如果从groupEP中取出 ip地址和port呢
[/Quote]
可能是我没讲清楚,我这里有个server端的软件,用来接收客户端发来的udp数据包。


server = new UdpClient(Port);
IPAddress a = IPAddress.Parse("127.0.0.1");//本地ip地址是127.0.0.1,
ReceivePort = new IPEndPoint(a, Port); //开启线程
StartServer = new Thread(new ThreadStart(Start_Server));
StartServer.Start();
public void Start_Server() 函数相关语句如下;
while (true)
{ byte[] recData = server.Receive(ref ReceivePort);
//获取客户端请求数据
//recdata是能够获取客户端发来的数据,可是我想如何获取 客户端的ip地址????

}

jerry_zhang99 2010-01-15
  • 打赏
  • 举报
回复
顶下
myleeable2010 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xuzysun 的回复:]
调用下面这句
byte[] bytes = this._listener.Receive(ref groupEP);
后,groupEP已包含了远程客户端ip地址和端口
[/Quote]

关键的代码是解决了。问题是,如果从groupEP中取出 ip地址和port呢
xuzysun 2010-01-15
  • 打赏
  • 举报
回复
调用下面这句
byte[] bytes = this._listener.Receive(ref groupEP);
后,groupEP已包含了远程客户端ip地址和端口
cqsfd 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 myleeable2010 的回复:]
引用 2 楼 cqsfd 的回复:
1楼说的对
IPAddress Ip = IPAddress.Parse("127.0.0.1");
this._listener = new UdpClient(this._port);
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any,this._port);
byte[] bytes = this._listener.Receive(ref groupEP);
......................
byte[] rebytes = System.Text.Encoding.UTF8.GetBytes(re.ToCharArray());
this._listener.Send(rebytes,rebytes.Length,groupEP);

byte[] rebytes = System.Text.Encoding.UTF8.GetBytes(re.ToCharArray());
this._listener.Send(rebytes,rebytes.Length,groupEP);

上面都是接收数据的语句;
怎么能够得到远程机器的ip呢?
[/Quote]
如楼上所说
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any,this._port);
表示你监听的是任何连接到这个端口的连接,下一句
byte[] bytes = this._listener.Receive(ref groupEP);
表示你接收时候,同时用groupEP记录下了对方是什么IP+端口,这时候就可以用groupEP这个地址来回送数据了
this._listener.Send(rebytes,rebytes.Length,groupEP);
myleeable2010 2010-01-14
  • 打赏
  • 举报
回复
dd
myleeable2010 2010-01-14
  • 打赏
  • 举报
回复
还有没有好办法?
myleeable2010 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cqsfd 的回复:]
1楼说的对
IPAddress Ip = IPAddress.Parse("127.0.0.1");
this._listener = new UdpClient(this._port);
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any,this._port);
byte[] bytes = this._listener.Receive(ref groupEP);
......................
byte[] rebytes = System.Text.Encoding.UTF8.GetBytes(re.ToCharArray());
this._listener.Send(rebytes,rebytes.Length,groupEP);
[/Quote]
byte[] rebytes = System.Text.Encoding.UTF8.GetBytes(re.ToCharArray());
this._listener.Send(rebytes,rebytes.Length,groupEP);

上面都是接收数据的语句;
怎么能够得到远程机器的ip呢?
wsxqaz 2010-01-14
  • 打赏
  • 举报
回复
穿透工具已经被做烂掉了有很多个,后来看到那么多类似的就想算了
大黄鸭在发光 2010-01-14
  • 打赏
  • 举报
回复
udp无非就是异步接收,马马虎虎这么写

private byte[] buffer;//接收信息
IPEndPoint MyServer = new IPEndPoint(IPAddress.Parse(“你服务端ip”), 端口号);
EndPoint Clientip = (EndPoint)MyServer;
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
sock.Bind(MyServer);

sock.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref Clientip, new AsyncCallback(recv), null);


//异步接收函数
private void recv(IAsyncResult iar)
{

int num = sock.EndReceiveFrom(iar, ref Clientip);

string IP = Clientip.ToString().Substring(0, Clientip.ToString().IndexOf(':'));

string port = Clientip.ToString().Substring(Clientip.ToString().IndexOf(':') + 1);

string command = Encoding.Unicode.GetString(buffer, 0, num);

......此时command就能获得客户端发来的不同的命令
cqsfd 2010-01-14
  • 打赏
  • 举报
回复
1楼说的对
IPAddress Ip = IPAddress.Parse("127.0.0.1");
this._listener = new UdpClient(this._port);
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any,this._port);
byte[] bytes = this._listener.Receive(ref groupEP);
......................
byte[] rebytes = System.Text.Encoding.UTF8.GetBytes(re.ToCharArray());
this._listener.Send(rebytes,rebytes.Length,groupEP);
  • 打赏
  • 举报
回复
receive方法会把remote out 出来的

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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