我有一个服务器的代码:
namespace Test
{
public class TCPListener
{
public static void Main()
{
TcpListener listener = null;
TcpClient client = null;
NetworkStream stream = null;
BinaryWriter writer = null;
try
{
listener = new TcpListener(new IPAddress(new byte[] { 127, 0, 0, 1 }), 5000);
listener.Start();
while (true)
{
using (client = listener.AcceptTcpClient())
{
using (stream = client.GetStream())
{
writer = new BinaryWriter(stream);
writer.Write("The message was received!");
}
}
}
}
catch (SocketException)
{
//Catch socket exception
}
}
}
}
现在,如果我将此代码放在控制台应用程序中并使用telnet,我会在命令提示符下收到"The message was received"
消息。现在,我将此代码(更改名称空间)复制并粘贴到Web应用程序中作为类。 Web应用程序解决方案部署在port 5000
上。除了服务器,它还包含许多用户可以浏览的页面。
不幸的是,如果我去telnet并输入"telnet 127.0.0.1 5000"
,就会实现连接,但是我没有收到任何连接。您认为这个问题是什么?我该如何解决?
答案 0 :(得分:1)
马修,
正如荣誉退休人员所说,你只能抓住一半的等式。然后,您需要实例化该类并调用Main()方法。
以下是你如何做到这一点:
TCPListener tcpListener = new TCPListener();
tcpListener.Main();
在基于Web的解决方案(控制器操作或后面的页面加载代码)的主要设置点中尝试这一点。另外,更改Main上的方法签名(删除静态)。
另外,你似乎在调用你自己的课程:
listener = new TcpListener();
这会引起很大的问题......我建议稍微重构并重新思考Main
的工作原理。你的第一个主要胜利是将上面的示例类重命名为远离TCPListener的东西,因为那里似乎发生了碰撞。
[编辑] 要保存阅读以下评论。 Matthew采用的最终解决方案是返回控制台解决方案并从webapp调用它。这样他获得了几场胜利:
这里要说的是,“总是检查选项并思考解决问题的单一解决方案”