C# 套接字侦听器只响应一次
我的套接字侦听端口,但仅第一次对消息作出反应,以后不再响应。 发生了什么?有什么建议可以解决吗?”因为我已经不知道该怎么办了。也许我监听端口的方式不合适C# 套接字侦听器只响应一次,c#,.net,sockets,C#,.net,Sockets,我的套接字侦听端口,但仅第一次对消息作出反应,以后不再响应。 发生了什么?有什么建议可以解决吗?”因为我已经不知道该怎么办了。也许我监听端口的方式不合适 public partial class Listener { private void InitListener() { Logger.InitializeLogger(); var listenSocket = new Socket(AddressFamily.InterNetwork,
public partial class Listener
{
private void InitListener()
{
Logger.InitializeLogger();
var listenSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
var ipHostInfo = Dns.Resolve(Dns.GetHostName());
var ipAddress = ipHostInfo.AddressList[0];
var endPoint = new IPEndPoint(ipAddress, Settings.Default.Port);
listenSocket.Bind(endPoint);
listenSocket.Listen(Settings.Default.listenerMaxConnection);
Logger.EventLogItem.WriteEntry(
$"Listen to {ipAddress}:{Settings.Default.Port}");
Logger.EventLogItem.WriteEntry("Connection Recieved");
Thread thread = new Thread(o => Listen(listenSocket));
thread.Start();
}
public void Listen(Socket socket)
{
var directory = @"C:\\Users\\*****\\Desktop\\bat files";
var handler = socket.Accept();
while (true)
{
try
{
while (handler.Connected)
{
byte[] x = new byte[100000];
handler.Receive(x);
var command = new string(Encoding.UTF8.GetChars(x.Where(t => t != 0).ToArray()));
if (string.IsNullOrEmpty(command))
{
Logger.EventLogItem.WriteEntry("Warning: Empty string");
break;
}
Logger.EventLogItem.WriteEntry(command);
Console.WriteLine(command);
switch (command)
{
case "run":
var myFiles = Directory.GetFiles(directory, "*.bat");
foreach (var bat in myFiles)
{
Process.Start(bat);
}
Logger.EventLogItem.WriteEntry("By command: " + command +
" was executed an appropriate .bat file.");
break;
case "getThreads":
Logger.EventLogItem.WriteEntry("By command: " + command +
" was executed an appropriate .bat file.");
break;
case "stop":
Logger.EventLogItem.WriteEntry("By command: " + command +
" was executed an appropriate .bat file.");
break;
case "start":
Logger.EventLogItem.WriteEntry("By command: " + command +
" was executed an appropriate .bat file.");
break;
case "close":
Logger.EventLogItem.WriteEntry("By command: " + command +
" was executed an appropriate .bat file.");
break;
}
}
}
catch (Exception ex)
{
Logger.EventLogItem.WriteEntry(
$"Exception happened in Listener: {ex.Message} - {ex.StackTrace}");
}
}
}
}
public partial class Listener
{
public static Listener Handler { get; } = new Listener();
public Listener()
{
var thread = new Thread(InitListener);
thread.Start();
}
}
这是我的主要任务
Listener listener = Listener.Handler;
你的问题在于:
var handler = socket.Accept();
while (true)
{
try
{
while (handler.Connected)
由于您的代码从未离开while循环,因此它从未循环接受下一个连接 您的问题在于:
var handler = socket.Accept();
while (true)
{
try
{
while (handler.Connected)
由于您的代码从未离开while循环,因此它从未循环接受下一个连接 您接受了外部循环,因此它永远不会返回尝试下一个连接您的客户端如何连接到服务器?如果它发送数据并断开连接,则需要进入循环。看到一个@BugFinder谢谢!!我没有看到每一个time@slawekwin是的,谢谢!这是您在循环之外接受的问题,因此它永远不会返回尝试下一个连接您的客户端如何连接到服务器?如果它发送数据并断开连接,则需要进入循环。看到一个@BugFinder谢谢!!我没有看到每一个time@slawekwin是的,谢谢!这就是问题所在