c# - 连接主动拒绝
问题描述
我正在编写一个 C# Sockets 网络应用程序。当我通过连接到 "127.0.0.1" 上的服务器进行测试时,它工作得很好,但是当我决定要从其他机器进行测试并将连接地址切换到我的实际 IP 地址时,我开始得到
无法建立连接,因为目标机器主动拒绝 -my IP address:port-
例外。
我在其他帖子中寻找解决方案,我发现一个是禁用我的防火墙,但这并没有解决问题。
客户端和服务器中的端口确实匹配,所以这不是问题。
另一个帖子建议运行netstat -anb
并查看服务器是否正在侦听指定的端口,令我惊讶的是,应用程序甚至没有出现在结果中。
下面是建立连接的代码:
我的课程中处理客户端连接的连接方法:
public bool Connect()
{
if (!connected)
{
try
{
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Connect(new IPEndPoint(IPAddress.Parse(address), port));
connected = true;
return true;
}
catch(Exception e)
{
Console.WriteLine(e.Message);
connected = false;
return false;
}
}
return false;
}
服务器端我使用这个简单的监听器:
public class Listener
{
Socket sock;
bool listening = false;
int port;
public delegate void socketAcceptedHandler(Socket s);
public event socketAcceptedHandler socketAccepted;
public Listener(int port)
{
this.port = port;
}
public void start()
{
if (listening)
{
return;
}
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Bind(new IPEndPoint(0, port));
sock.Listen(0);
sock.BeginAccept(callback, null);
listening = true;
}
public void stop()
{
if (!listening)
{
return;
}
if (sock != null)
{
sock.Close();
sock.Dispose();
}
listening = false;
}
public void callback(IAsyncResult result)
{
try
{
Socket s = sock.EndAccept(result);
if (socketAccepted != null)
{
socketAccepted(s);
}
sock.BeginAccept(callback, null);
}
catch (Exception e)
{
Console.WriteLine("Something went wrong:\n{0}", e.Message);
}
}
}
更新:如果我使用我的本地 IP 地址,我检查了连接是否建立,它是。应该是路由器的东西。
解决方案
防火墙可能阻止了端口,其他程序可能正在侦听端口或端口受到限制。您可以在命令提示符下运行“netstat -aon”来查看哪个进程正在侦听您要访问的端口。
推荐阅读
- javascript - 谷歌地图代码 dosent 将地图保存在屏幕上
- python - 管道上的 EOS 未执行
- angular - Angular 8 的 ngModel 解决方案
- python - 在 PyQt5 中的 HiDPI 显示器上使用 SVG 图标
- c# - 这段 C# 代码如何转换为它的 C 版本?
- xslt - 满足复杂条件时的模板覆盖
- c# - 反序列化抽象类实现.Net Core C#
- asp.net - 使用 ASP 启动/停止 Windows 服务时访问被拒绝
- node.js - Azure - 在对函数应用的每个请求之前执行一些代码
- ios - 如何更改第二个 UIWindow 的状态栏颜色?