我在写一个C_sockets网络应用程序。
当我在“127.0.0.1”上连接到服务器进行测试时,它工作得很好
但是,当我到达我决定要从其他机器测试并把连接的地址切换到我的实际IP地址的那一点时,我开始得到
无法建立连接,因为目标计算机处于活动状态
拒绝-我的IP地址:端口-
例外。
我在其他岗位上寻找解决方案,我发现
禁用我的防火墙
,但这并不能解决问题。
客户机和服务器中的端口确实匹配,所以这不是问题所在。
另一篇文章建议运行
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地址,它是。一定是路由器的问题。