TCP连接被拒绝的问题

profan2046 2009-04-13 04:09:46
就一行代码:
TcpClient myClient = new TcpClient("127.0.0.1",8000);
就会抛出“目标主机积极拒绝,无法连接的”的异常。
防火墙都关了,郁闷啊,才写一行代码就出差,。。。。。
...全文
2158 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
cja03 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 profan2046 的回复:]
端口是8001,写错了哈,个人怎么觉得开不开服务器,跟在客户端创建一个客户端对象没什么关系呢。TcpClient tcp = new TcpClient(“127.0.0.1”,8001);这一句只在客户端创建一个对象,应该没和服务器发生什么关系吧,况且我先开了服务器还是会在这句报错,下面的连接建立根本就没有执行到。。。现在怀疑是不是自己的.Net环境有问题或是自己的机子哟问题。。。
[/Quote]

TcpClient 构造函数 (String, Int32)
此构造函数创建新的 TcpClient,并尝试同步连接到所提供的主机名和端口号。基础服务提供程序将分配最合适的本地 IP 地址和端口号。TcpClient 一直阻塞,直到连接成功或失败才解除这种状态。利用此构造函数,只需一步即可方便地初始化、解析 DNS 主机名并建立连接。


如果你服务器开了,看看有没有在监听你指定的端口,有监听的话,可以连接的。
jmctian 2009-04-14
  • 打赏
  • 举报
回复
用命令行下用 netstat -na 检查一下8000端口是否已经打开。
qldsrx 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 profan2046 的回复:]
开了服务器,用TcpClient tcp = new TcpClient(“127.0.0.1”,80001); 还是会出现同样的问题。
[/Quote]

端口号最大只有65535,你怎么可能设置那么大?
其实要确定服务器端是否在运行,可以查看下本地端口使用情况,很多软件都可以查看的。如果那个端口未处于监听状态,自然是无法连接的。

另外要注意的是,服务器代码如果不写在循环里,那么只能接收一次客户端的连接,不管成功与否,一次之后服务器端退出运行,客户端就无法再次连接,所以一般服务器端的代码是写在while语句里无限循环运行的,如果用控制台运行的话,不需要考虑用户用户界面的响应问题,如果是winform的话,得放在多线程里运行才行。
cja03 2009-04-14
  • 打赏
  • 举报
回复
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000);
TcpClient client = new TcpClient(endPoint);
profan2046 2009-04-14
  • 打赏
  • 举报
回复
依然不行啊。。。 疯了。。。。。
hxdljk 2009-04-14
  • 打赏
  • 举报
回复
您吧“127.0.0.1”改成你的网络地址再试试看
profan2046 2009-04-14
  • 打赏
  • 举报
回复
端口是8001,写错了哈,个人怎么觉得开不开服务器,跟在客户端创建一个客户端对象没什么关系呢。TcpClient tcp = new TcpClient(“127.0.0.1”,8001);这一句只在客户端创建一个对象,应该没和服务器发生什么关系吧,况且我先开了服务器还是会在这句报错,下面的连接建立根本就没有执行到。。。现在怀疑是不是自己的.Net环境有问题或是自己的机子哟问题。。。
ncqingchuan1976 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 profan2046 的回复:]
To lubin1221328 :
问题还是有的,客户端的TcpClient tcp = new TcpClient();(这样没问题)但若改成TcpClient tcp = new TcpClient(“127.0.0.1”,80001); 还是会出现“目标主机积极拒绝...”的消息。不知到是不是自己的机子有问题。
lubin1221328你机子上面若改成TcpClient(“127.0.0.1”,80001),能正常运行吗?
[/Quote]

端口号能达到80001吗?
aa37742698 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 rtdb 的回复:]
你要先确保有个TCP Server 在监听 PORT 8000。
[/Quote]


ding 再简单点说 你要先开服务器
saisky 2009-04-14
  • 打赏
  • 举报
回复
服务端挂起的监听逻辑有问题吧?
好好检查下你的服务端
profan2046 2009-04-14
  • 打赏
  • 举报
回复
开了服务器,用TcpClient tcp = new TcpClient(“127.0.0.1”,80001); 还是会出现同样的问题。
profan2046 2009-04-14
  • 打赏
  • 举报
回复
问题终于解决了,折腾了1,2天...
看了一下MSDN才弄清楚了,个人理解:
TcpClient() //是一个client对象,并绑定一个本地IP和随机自选端口。
TcpClient (String ip, Int32 port)
其实是两步:一是创建一个client对象(端口也是随机的),二是连接到远程端的IP和端口,有一个connect的动作(先前一直以为只进行第一步)。之所以先的用TcpClient (String ip, Int32 port)总是报"目标拒绝",就是没有在远程端监听port端口,这样始终连接不上port端口。
TcpClient(IPEndPoint)
也是只建立了一个client对象同TcpClient()一样要调用connect方法才能和远程端连接起来。
zenowolf 2009-04-14
  • 打赏
  • 举报
回复
用你本机的ip地址就好用。
scy251147 2009-04-13
  • 打赏
  • 举报
回复
服务器开启了吗,要是服务器没有开启的话,应该出现这个问题
profan2046 2009-04-13
  • 打赏
  • 举报
回复
To lubin1221328 :
问题还是有的,客户端的TcpClient tcp = new TcpClient();(这样没问题)但若改成TcpClient tcp = new TcpClient(“127.0.0.1”,80001); 还是会出现“目标主机积极拒绝...”的消息。不知到是不是自己的机子有问题。
lubin1221328你机子上面若改成TcpClient(“127.0.0.1”,80001),能正常运行吗?
lubin1221328 2009-04-13
  • 打赏
  • 举报
回复
客户端代码:
int port = 8000;
IPAddress myIp = IPAddress.Parse("127.0.0.1");
TcpClient tcp = new TcpClient();
tcp.Connect(myIp, port);
Console.WriteLine("正在连接服务器……");
try
{
NetworkStream ns = tcp.GetStream();
Console.WriteLine("要发送的数据:");
string send = Console.ReadLine();
byte[] bytes = new byte[1024];
bytes = Encoding.BigEndianUnicode.GetBytes(send);
ns.Write(bytes, 0, bytes.Length);
ns.Close();
tcp.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
服务器端代码:
int port = 8000;
IPAddress myIp = IPAddress.Parse("127.0.0.1");
TcpListener s = new TcpListener(myIp, port);
s.Start();
Console.WriteLine("开始监听……");
TcpClient tcp = s.AcceptTcpClient();
try
{
NetworkStream ns = tcp.GetStream();
string received = "";
byte[] bytes = new byte[1024];
ns.Read(bytes, 0, bytes.Length);
received = Encoding.BigEndianUnicode.GetString(bytes);
Console.WriteLine("收到的数据为:" + received);
tcp.Close();
ns.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
lubin1221328 2009-04-13
  • 打赏
  • 举报
回复
在测试的时候要先运行服务器的代码
TcpClient myClient = new TcpClient("127.0.0.1",8000); 要先把IP地址转换成:网际协议IP地址
客户端:
int port = 8000;
IPAddress myIp = IPAddress.Parse("127.0.0.1");
TcpClient tcp = new TcpClient();
tcp.Connect(myIp, port);
服务器端:
int port = 8000;
IPAddress myIp = IPAddress.Parse("127.0.0.1");
TcpListener s = new TcpListener(myIp, port);
s.Start();
profan2046 2009-04-13
  • 打赏
  • 举报
回复
怎么会先要服务器端监听8000端口呢,我这里只是创建了一个客户端对象,并没有和远程服务器端发生连接吧。
profan2046 2009-04-13
  • 打赏
  • 举报
回复
就是啊,我换了几个端口都出项同样的问题。若用new TcpClient()就不会出现这个异常,好像不带参数的的端口分配的是0吧。
rtdb 2009-04-13
  • 打赏
  • 举报
回复
你要先确保有个TCP Server 在监听 PORT 8000。
加载更多回复(1)

110,533

社区成员

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

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

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