c# IPEndPoint socket 通信问题?

b635999233 2011-09-26 04:48:40
利用 IPEndPoint iep = new IPEndPoint(IPAddress.Any, 56356);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(iep);
socket.Listen(5);
进行监听的时候IPAddress.Any应该是本机的IP地址!但是由于本机是内网的!所有获取到的就是外网的IP地址,也就是说点击打开监听的时候,打开的是外网IP所在机子的端口,而本机却没打开!怎么实现打开的是本机的端口,而不是外网的端口!

另一方连接时【IPEndPoint iep = new IPEndPoint(IPAddress.Any, 56356)】中的IPAddress.Any应该是什么?
...全文
258 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
b635999233 2011-09-27
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 gengchenhui 的回复:]
这个,楼主是缺基础知识?
[/Quote]
学网络编程才半个月!
b635999233 2011-09-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sj97a007 的回复:]
受不了了
你要实现内网通信是吧?

给你个简单方法。一台电脑用IPAddress.Any绑定,假定为电脑A
另一台电脑搞个输入框,手动输入电脑A的内网IP,测试连接(ping),成功则尝试通信,OK

忘掉你自己的代码吧。
IPAddress ieh = Dns.GetHostByName(Dns.GetHostName()).AddressList[0];
这种方式运行前你根本不……
[/Quote]
呵呵呵!!哎!老实说吧,我要实现的是web类型的通信,就是你打开网页登录后就监听,对方登录后通过某种途径获取到你登录的IP地址和监听端口,然后用这IP地址和端口对你请求连接,开始通信这样的!
gengchenhui 2011-09-27
  • 打赏
  • 举报
回复
这个,楼主是缺基础知识?
tian6565597 2011-09-27
  • 打赏
  • 举报
回复
而且在真正的实现过成功,会占用很长的运行时间
tian6565597 2011-09-27
  • 打赏
  • 举报
回复
之前也遇到过这个问题,利用DnsGetHostByName或者是GetHostEntry之类的是不一定能得到想要的IP地址的
枪牌 2011-09-27
  • 打赏
  • 举报
回复
受不了了
你要实现内网通信是吧?

给你个简单方法。一台电脑用IPAddress.Any绑定,假定为电脑A
另一台电脑搞个输入框,手动输入电脑A的内网IP,测试连接(ping),成功则尝试通信,OK

忘掉你自己的代码吧。
IPAddress ieh = Dns.GetHostByName(Dns.GetHostName()).AddressList[0];
这种方式运行前你根本不知道获取到的是哪块网卡哪个IP
b635999233 2011-09-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sp1234 的回复:]
让我猜想,如果你是问“内网的机器如何监听外网的连接”,那么这个问题本身是无解的。无论如何,要么把服务器放在外网,要么外网必须有真实的服务器作为通讯代理。而至于如何开发一个代理,我想lz就不用考虑去了。考虑让外网可访问服务器即可。
[/Quote]
暂时考虑内网的,好像有个什么TCP打洞的来实现不同局域网下内网与内网的连接!我还想实现不用服务器来实现!是不是异想天开!?
b635999233 2011-09-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sp1234 的回复:]
“进行监听的时候IPAddress.Any应该是本机的IP地址”这是什么意思?

“但是由于本机是内网的!所有获取到的就是外网的IP地址”更是看不懂?

“也就是说点击打开监听的时候,打开的是外网IP所在机子的端口,而本机却没打开”背过气去了!

“另一方连接时【IPEndPoint iep = new IPEndPoint(IPAddress.Any, 56356)】中的IPAddr……
[/Quote]
是这样吗?嘿嘿!表达能力不是很行!有些代码没贴出来!我先说其中的一个问题,同一个局域网下的两台电脑,我用IPAddress ieh = Dns.GetHostByName(Dns.GetHostName()).AddressList[0];获取ip地址,然后IPAddress.Any 值就是ieh,但是两台电脑上的IPAddress.Any竟然是一样的!而且ieh还是外网的ip地址,这时打开监听会错的吧,都不知道打开的是哪台机子的!郁闷!!!我想实现内网通信不知道行不行?
  • 打赏
  • 举报
回复
考虑把服务器接在外网直连访问即可。
  • 打赏
  • 举报
回复
让我猜想,如果你是问“内网的机器如何监听外网的连接”,那么这个问题本身是无解的。无论如何,要么把服务器放在外网,要么外网必须有真实的服务器作为通讯代理。而至于如何开发一个代理,我想lz就不用考虑去了。考虑让外网可访问服务器即可。
枪牌 2011-09-27
  • 打赏
  • 举报
回复
顶楼上,看晕了
你可以将IPAddress.Any理解成绑定计算机所有网卡
  • 打赏
  • 举报
回复
“进行监听的时候IPAddress.Any应该是本机的IP地址”这是什么意思?

“但是由于本机是内网的!所有获取到的就是外网的IP地址”更是看不懂?

“也就是说点击打开监听的时候,打开的是外网IP所在机子的端口,而本机却没打开”背过气去了!

“另一方连接时【IPEndPoint iep = new IPEndPoint(IPAddress.Any, 56356)】中的IPAddress.Any应该是什么”另一方你连接时写什么IP,哪怕从网上随便抄一个最次的代码也是写正规的IP的啊。
  • 打赏
  • 举报
回复
看不懂这个问题中一些列貌似“当然”的断言。
shiyunqiang 2011-09-26
  • 打赏
  • 举报
回复
问错地方了。这里是C++的地盘。

111,125

社区成员

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

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

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