-1

我使用以下链接开发了一个套接字客户端/服务器程序

服务器套接字代码:http: //msdn.microsoft.com/en-us/library/fx6588te.aspx

客户端套接字代码:http: //msdn.microsoft.com/en-us/library/bew39x2a.aspx

经过我的开发,我为服务器程序创建了一个服务,并将其部署在 windows 8 服务器上。当我尝试使用客户端从我的开发机器(Win 7)连接服务器程序时,出现以下异常

System.Net.Sockets.SocketException:无法建立连接,因为目标计算机在 EODClient.AsyncClient.ConnectCallback(IAsyncResult ar) 的 System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult) 处主动拒绝了它 10.80.33.77:8000

抛出异常的客户端代码

   private static void ConnectCallback(IAsyncResult ar) {
    try
    {
        Socket client = (Socket) ar.AsyncState;
        client.EndConnect(ar); //Throwing an Exception here

    } catch (Exception e)
    {
    }

我在同一台计算机上测试了客户端和服务器,但我得到了同样的例外。

但是在下面的场景中,上面的代码运行良好。

  1. 在调试模式下使用 Visual Studio 2008 启动服务,从 Windows 8 服务器启动客户端
  2. 在调试模式下使用 Visual Studio 2008 启动服务,从同一台开发机器启动客户端

在此先感谢您的帮助。

4

1 回答 1

0

在 Socket 服务器代码中,我在 Main 方法中创建了线程。但是在将其部署到服务器后,线程启动代码永远不会被调用。

最后,我将线程代码移至 OnStart 方法,如下所示,它工作正常。

 protected override void OnStart(string[] args)
 {
    thread = new Thread(WorkerThreadFunc);
    thread.Name = "My Worker Thread";
    thread.IsBackground = true;
    thread.Start();
 }

下面的帖子帮助解决了这个问题: Windows 服务不断运行

很抱歉没有复制代码的核心(问题)部分。代码正在与调试器一起工作,所以我从不怀疑上面从 Main 函数调用的代码。

于 2013-08-13T19:56:48.063 回答