为什么socket在局域网内可以,在广域网就不行?

wurenxiaozu 2004-12-20 09:38:02
请大家帮忙看看,下面是我的程序:
服务器端:client=new IPEndPoint( IPAddress.Any,2288);
server=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
server.Blocking=true;
server.Bind(client);
server.Listen(100);

客户端:IPAddress serIP=IPAddress.Parse(服务器的ip地址);
IPEndPoint sever=new IPEndPoint(serIP,2288);
Socket clinet=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
clinet.Connect(sever);
我在局域网内测试一点问题都没有,可是放在广域网内就不行?报错说连接不到服务器.
...全文
693 28 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
ekinwt 2004-12-23
  • 打赏
  • 举报
回复
你把服务器监听的IP地址就是括号前面那部分(client=new IPEndPoint( IPAddress.Any,2288))的IP改成"0.0.0.0"即服务器监听0.0.0.0的2288端口.

这样应该就可以了.
wurenxiaozu 2004-12-23
  • 打赏
  • 举报
回复
我客户端是知道服务器的地址的,客户端ping可以ping到服务器,为什么它连不上,非要用它上网的代理服务器去连呢?
a10002 2004-12-21
  • 打赏
  • 举报
回复
安装客户端时要只动去找本网与外界相连的IP和可用端口
再用它去联服务器!
客户端:IPAddress serIP=IPAddress.Parse(服务器的ip地址);
IPEndPoint sever=new IPEndPoint(serIP,2288);

否则它只会在本网中找你所谓的"服务器的ip地址"找不到就报错,找到了服务器不存在也报错!
a10002 2004-12-21
  • 打赏
  • 举报
回复
我感觉,局域网里的IP与广域网没有必然的联系,联系到底在哪?
找不到这种联系的话,你是决不可能解决这种问题的!

所以你在客户端要活一点,安装客户端时要只动去找本网与外界相连的IP和可用端口,每个民局域网都不同,所以这个是动态的.这样之后就变成了全是广域网的问题了!
gzlucky 2004-12-21
  • 打赏
  • 举报
回复
个人感觉有几个问题,
一个是防火墙可能进行阻断,
另一个是不是你们都是内网访问外网啊?
你可以用tracert在client连接你的server端,或者你直接使用telnet xx.xxx.xxx.xxx 2288 来试一试,看是能不能打开,如果端也是打不开,就是server端或者中间路由或防火墙出了问题。

或者你可以这样,在Server端运行后。用netstat -an 查看一下你的2288端口是用什么IP地址来监听的。如果是使用你Internet的IP或者是0.0.0.0 的话 Server应该没问题,如果是局域网IP就不用我说了。

client端当你在运行的时候,立即使用 netstat -n 来看一看是否向你正确的IP地址的2288端口进行连接。
DeliverGuy 2004-12-21
  • 打赏
  • 举报
回复
学习
wurenxiaozu 2004-12-21
  • 打赏
  • 举报
回复
再顶一下,请大家帮忙
wurenxiaozu 2004-12-21
  • 打赏
  • 举报
回复
自己顶一下,请大家帮忙,我还没弄明白呢,谢谢了,客户端真的不要也要有广域网IP地址吗?
wurenxiaozu 2004-12-21
  • 打赏
  • 举报
回复
不会的,端口绝对是打开的,如果端口没有打开,无论我是局域网还是广域网都应该不行的
lxkim 2004-12-21
  • 打赏
  • 举报
回复
端口有可能被屏蔽掉了。。。。
wurenxiaozu 2004-12-21
  • 打赏
  • 举报
回复
那么我不明白了,我用外网访问服务端没有问题,为什么使用内网就是不行呢?
还有,由于用户不固定,我事先不可能知道用户会从哪些地方来访问呀,如果不用IPAddress.Any怎么可以保证连接?
gzlucky 2004-12-21
  • 打赏
  • 举报
回复
如果你的Client是内网的话,需要你的访问外网时用的是NAT转接,否则你如何连接Internet的IP啊?
herony420 2004-12-21
  • 打赏
  • 举报
回复
客户端当然不需要一定的外网IP,因为你生成的socket的flag是不一样的,再多的客户端连接,服务器也能给你区别开,包括在内网里
herony420 2004-12-21
  • 打赏
  • 举报
回复
首先保证你的服务器绑定的IP是你客户端连接的IP,你用的是IPAddress.Any,不能保证是你的客户端连接的IP,
另外看看你的服务器的路由设置,如果路由设置允许这个端口开放给你访问就肯定可以,不会有别的原因,也不要考虑复杂了
wurenxiaozu 2004-12-21
  • 打赏
  • 举报
回复
我确实是用内网访问外网,难道不仅服务器需要一个独立的IP,连客户端也必须有独立的广域网IP吗?
tl0 2004-12-21
  • 打赏
  • 举报
回复
你的代码里没有规定是哪个网段,所以Socket只找当前主机所在的网段,如果服务器和客户机不在一个网段,当然会报错。
Csharpking 2004-12-21
  • 打赏
  • 举报
回复
ding,增加连接的次数。
wurenxiaozu 2004-12-20
  • 打赏
  • 举报
回复
不可能是端口问题,我在服务器上用客户端测试没有问题,但在另外一台机器上就不行,可见端口是打开的
lucbesson 2004-12-20
  • 打赏
  • 举报
回复
应该从最基本的问题研究起,不是一两句话的问题 。
网关 防火墙 等等都是有可能的 !

端口有可能被屏蔽掉了。。。。


wurenxiaozu 2004-12-20
  • 打赏
  • 举报
回复
自己顶一下,请大家帮帮忙,谢谢各位了
加载更多回复(8)

111,092

社区成员

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

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

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