Socket为什么外网无法连接?内网可以

iuhxq 2010-10-12 08:26:24
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
using System.Text.RegularExpressions;

namespace WebServer
{
class HttpProcess
{
Socket s;

public HttpProcess(Socket s)
{
this.s = s;
}

public void process()
{
string head = "";
int len = 0;
byte[] buf = new byte[1];
do
{
len = s.Receive(buf);
head += Encoding.ASCII.GetString(buf);
} while (len > 0 && !head.EndsWith("\r\n\r\n"));

Console.WriteLine(head);

string content = "ok";

string raw = string.Format(@"HTTP/1.1 200 OK
Content-Length: {0}
Content-Type: text/html

{1}", Encoding.Default.GetByteCount(content), content);

Console.WriteLine(raw);

s.Send(Encoding.Default.GetBytes(raw));
s.Shutdown(SocketShutdown.Both);
s.Close();
}
}
public class HttpServer
{
static void listen()
{
Socket listener = new Socket(0, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 81);
listener.Bind(endpoint);
listener.Blocking = true;
listener.Listen(-1);
while (true)
{
Socket s = listener.Accept();
HttpProcess p = new HttpProcess(s);
Thread thread = new Thread(new ThreadStart(p.process));
thread.Start();
}
}



public static int Main(String[] args)
{
Thread thread = new Thread(new ThreadStart(listen));
thread.Start();
return 0;
}
}

}


在我本机,127.0.0.1:81和192.168.1.100:81都可以访问,但是如果放到服务器上,用222.11.22.33:81就无法访问?

请高手指教
...全文
1336 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
迷路子 2012-07-23
  • 打赏
  • 举报
回复
你的局域网IP一出路由器,就被路由器丢包了,
landerson 2011-01-16
  • 打赏
  • 举报
回复
都不一样的东西,当然连不上啦
你用路由上的,你电脑的IP不是你公网的IP,,你要取得你路由的公网IP才行呀
iuhxq 2010-10-12
  • 打赏
  • 举报
回复
找到问题了,我同事启用了TCP/IP筛选,我只是看了防火墙那里允许,没想起来TCP/IP筛选
walkghost 2010-10-12
  • 打赏
  • 举报
回复
另外,如果你是直接在路由器上做的端口转发,是允许了tcp还是UDP?另外,是电信的网络,商务领航?有的路由器在端口转发方面有bug?或者你可以根据你的路由器型号,到官网或者公网上查询有无最新程序升级。有无网友遇到过相同问题。
walkghost 2010-10-12
  • 打赏
  • 举报
回复
你可以试着把你的iis监听81端口,试试外网能访问web不。如果OK的话,至少说明用81端口提供web服务时可以的。另外,你看看是不是你的防火墙的过滤规则问题,或者acl设置的问题。
walkghost 2010-10-12
  • 打赏
  • 举报
回复
我试了一下,不能连接你222.11.22.33:81这个程序。socket连接不成功。80端口也不成功。
你是不是启用了DMZ主机?
whb147 2010-10-12
  • 打赏
  • 举报
回复
应该是服务器的防火墙挡住了
vrhero 2010-10-12
  • 打赏
  • 举报
回复
本机测没用的...网络环境很复杂,还是先仔细查一下路由器防火墙等等配置吧...
iuhxq 2010-10-12
  • 打赏
  • 举报
回复
在本机怎么测都可以,把软件放服务器上就不行了,IP改为192.168.1.100,跟服务器的IP一点关系没有。应该不是这里问题。
vrhero 2010-10-12
  • 打赏
  • 举报
回复
把IPAddress.Any改成192.168.1.100测试一下...再仔细查一下路由器配置...
iuhxq 2010-10-12
  • 打赏
  • 举报
回复
从我电脑,ping服务器IP,可以通,访问服务器上的网站也可以。

telnet ip 80也可以

telnet ip 我程序的端口,不通。

但是到服务器上去执行netstat -nao可以看到端口已经在监听了。
vrhero 2010-10-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 iuhxq 的回复:]
可以ping到,换了1589,还是不行。

另外即使在服务器上telnet 公网ip 端口,也不通

telnet 局域网IP 端口就是通的。
[/Quote]
你从什么地方ping到的?外部的公网地址能telnet到你的服务器吗?你的服务器telnet外部公网服务器不通?
iuhxq 2010-10-12
  • 打赏
  • 举报
回复
郁闷死了,把软件放我自己电脑上,路由器上公开我的电脑。

然后用服务器的IE,可以访问我的电脑公网IP。

晕了,应该足以说明软件没问题了。

是服务器端口或者什么原因。。。
iuhxq 2010-10-12
  • 打赏
  • 举报
回复
netstat -nao可以看到端口已经在监听

但是telnet ip port 显示无法连接
iuhxq 2010-10-12
  • 打赏
  • 举报
回复
呵呵,看过了,防火墙已经允许这个软件了。也试过直接添加端口。还是不行。

死活不开这个端口。
aofengdaxia 2010-10-12
  • 打赏
  • 举报
回复
查看下服务器防火墙的设置
clong320 2010-10-12
  • 打赏
  • 举报
回复
可能是端口问题,再找一个空闲的端口试试
iuhxq 2010-10-12
  • 打赏
  • 举报
回复
另外一个现象:
我开发用的机器,电信拨号,有路由器。我在路由器里设置本机对外完全公开。
然后用我公网IP也可以访问我的程序。

这个是不是足以说明程序是可以用的。只是网络设置引起的服务器上的软件无法使用?
iuhxq 2010-10-12
  • 打赏
  • 举报
回复
可以ping到,换了1589,还是不行。

另外即使在服务器上telnet 公网ip 端口,也不通

telnet 局域网IP 端口就是通的。
freefei 2010-10-12
  • 打赏
  • 举报
回复
可以ping到服务器吗,可以ping到的话换个1024以后的端口试试。
加载更多回复(1)

111,092

社区成员

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

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

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