2013-03-22 155 views
0

我有部署几个窗口服务套接字服务器

static void Main() 
     { 
      DebugManager manager = new DebugManager(); 

      ServiceBase[] ServicesToRun; 
      ServicesToRun = new ServiceBase[] 
      { 
       new Service1(), 
       new Service2(), 
       new Service3(), 
          }; 
      ServiceBase.Run(ServicesToRun); 
     } 

这里服务应用是DebugManager

public class DebugManager : BaseDebug 
    { 
     private AsyncServer s; 

     public DebugManager() 
     { 
      s = new AsyncServer(10000); 
      s.Start(); 
     } 

     public override void SendMessage(string message) 
     { 
      ts.SendMessage(message); 
     } 

     } 

而且套接字服务器本身

class AsyncServer 
    { 
     private Socket _serverSocket; 
     private List<Socket> _clients; 

     private int _port; 
     byte[] buffer = new byte[255]; 

     public AsyncServer(int port) { _port = port; } 

     public void Start() 
     { 
      try 
      { 
       _clients = new List<Socket>(); 
       SetupServerSocket(); 
       _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), _serverSocket); 
      } 
      catch(Exception ex) 
      { 
       EventLogManager.LogInformation(ex.ToString()); 
      } 
     } 

     private void SetupServerSocket() 
     { 
      try 
      { 
       IPHostEntry localMachineInfo = Dns.GetHostEntry(Dns.GetHostName()); 
       IPEndPoint myEndpoint = new IPEndPoint(localMachineInfo.AddressList[1], _port); 
       _serverSocket = new Socket(myEndpoint.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp); 
       _serverSocket.Bind(myEndpoint); 
       _serverSocket.Listen((int)SocketOptionName.MaxConnections); 
      } 
      catch (Exception ex) 
      { 
       EventLogManager.LogInformation(ex.ToString()); 
      } 
     } 

     private void AcceptCallback(IAsyncResult result) 
     { 
      try 
      { 
       Socket s = (Socket)result.AsyncState; 
       Socket socket = s.EndAccept(result); 
       _clients.Add(socket); 

       _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), result.AsyncState); 
      } 
      catch (SocketException ex) 
      { 
       EventLogManager.LogInformation(ex.ToString()); 
      } 
      catch (Exception ex) 
      { 
       EventLogManager.LogInformation(ex.ToString()); 
      } 
     } 

     public void SendMessage(string message) 
     { 
      try 
      { 
       byte[] bits = Encoding.UTF8.GetBytes(message); 
       SocketAsyncEventArgs args = new SocketAsyncEventArgs(); 
       args.SetBuffer(bits, 0, bits.Length); 

       foreach (var client in _clients) 
       { 
        if (!client.Connected) 
        { 
         _clients.Remove(client); 
         continue; 
        } 

        try 
        { 
         client.SendAsync(args); 
        } 
        catch (Exception ex) 
        { 
         EventLogManager.LogInformation(ex.ToString()); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       EventLogManager.LogInformation(ex.ToString()); 
      } 
     } 
    } 

当我部署我的服务似乎我的套接字服务器没有启动,或者立即启动然后关闭。我的设计中是否有任何问题,或者可能是im代码?

回答

0

已经发现问题所在。它是

private void SetupServerSocket() 
     { 
      try 
      { 
       IPHostEntry localMachineInfo = Dns.GetHostEntry(Dns.GetHostName()); 
       //Here is problem 
       IPEndPoint myEndpoint = new IPEndPoint(localMachineInfo.AddressList[1], _port); 
       _serverSocket = new Socket(myEndpoint.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp); 
       _serverSocket.Bind(myEndpoint); 
       _serverSocket.Listen((int)SocketOptionName.MaxConnections); 
      } 
      catch (Exception ex) 
      { 
       EventLogManager.LogInformation(ex.ToString()); 
      } 
     } 

几个地址被返回,[1]是IPV6。将其更改为InterNetwork并运行。我认为它以前工作,但我的客户端不能连接到服务器。