套接字服务器
问题描述:
我有部署几个窗口服务套接字服务器
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代码?
答
已经发现问题所在。它是
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并运行。我认为它以前工作,但我的客户端不能连接到服务器。