c# - 如何在超时时结束循环,TCPServer Socket C#
问题描述
我正在创建一个 TCP 服务器/客户端。至于这个项目,我只需要运行这个函数 60 秒,然后它就会终止。有人可以指导我修复此代码吗?
public static void SendTCPServer(string content)
{
Stopwatch timer = new Stopwatch();
timer.Start();
byte[] data = new byte[1024];
IPEndPoint ipep = new IPEndPoint(IPAddress.Any,
8080);
Socket newsock = new
Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
newsock.Bind(ipep);
newsock.Listen(10);
while (timer.Elapsed.TotalSeconds < 60)
{
Console.WriteLine("Waiting for a client...");
Socket client = newsock.Accept();
IPEndPoint clientep =
(IPEndPoint)client.RemoteEndPoint;
Console.WriteLine("Connected with {0} at port {1}",
clientep.Address, clientep.Port);
string welcome = content;
data = Encoding.ASCII.GetBytes(welcome);
client.Send(data, data.Length,
SocketFlags.None);
Console.WriteLine("Disconnected from {0}",
clientep.Address);
client.Close();
newsock.Close();
return;
}
timer.Stop();
//client.Close();
newsock.Close();
return;
}
解决方案
您可以为此使用线程。
public class Parameters
{
public Socket _socket;
public string content;
}
//calling part
Thread listenerThread = new Thread(new ParameterizedThreadStart(SendTCPServer));
Socket newsock = new
Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
listenerThread.Start(new Parameters { _socket = newsock, content = "Welcome"
});
Thread.Sleep(60000);
newsock.Dispose();
//calling part end
public static void SendTCPServer(object obj)
{
try
{
Stopwatch timer = new Stopwatch();
timer.Start();
byte[] data = new byte[1024];
IPEndPoint ipep = new IPEndPoint(IPAddress.Any,
8080);
Parameters param = obj as Parameters;
Socket newsock = param._socket;
newsock.Bind(ipep);
newsock.Listen(10);
while (timer.Elapsed.TotalSeconds < 60)
{
Console.WriteLine("Waiting for a client...");
Socket client = newsock.Accept();
IPEndPoint clientep =
(IPEndPoint)client.RemoteEndPoint;
Console.WriteLine("Connected with {0} at port {1}",
clientep.Address, clientep.Port);
string welcome = param.content;
data = Encoding.ASCII.GetBytes(welcome);
client.Send(data, data.Length,
SocketFlags.None);
Console.WriteLine("Disconnected from {0}",
clientep.Address);
client.Close();
newsock.Close();
return;
}
timer.Stop();
//client.Close();
newsock.Close();
return;
}
catch (Exception ex)
{
}
}
推荐阅读
- python - 如何在 Flask(wtforms)中验证最小大小的浮点数组?
- javascript - 为什么我的两个单独的 Vue 组件会覆盖彼此的数据?
- node.js - 如何将从 reactjs 中的 nodejs 后端接收到的 Blob 下载到 ReactJS 中的任何操作系统?
- python - 计算组内的唯一值,然后将两个转换为类别
- java - 在 JUnit 中模拟方法时传递对象
- javascript - 使用数组元素和数组字符串查找重复元素计数
- android - 已添加 IllegalStateException 片段
- python - Matplotlib:如何为每个散点添加图例?
- reactjs - 反应useState不更新状态
- css - 将 pug 用于独立(微型)小部件