Tag: tcplistener

如果任务管理器中的Mem Usage不断增加,如何知道是否存在内存泄漏

我写了一个小的Server类,它基本上是一个TcpListener包装器和ThreadPool线程spawner。 线程运行Server :: ProcessMessage(),它执行一些工作来回发送消息,然后在它结束时退出。 但是在退出函数之前,我还调用TcpClient.GetStream()。Close()然后调用TcpClient.Close()。 我不使用任何Mutex或ManualResetEvent WaitHandles。 测试了客户端和服务器,一切正常,除了在任务管理器中,它显示每个Server :: ProcessMessage()上的Mem Usage不断增加。 即使所有客户端应用程序都已断开连接并关闭,Mem Mem仍然存在,而不是减少。 服务器作为Windows服务运行。 我怎么知道它是否是内存泄漏的迹象,或者只是垃圾收集器没有完成其工作(还)? 谢谢。 编辑:我想我找到了“内存泄漏”的原因。 我的Server :: ProcessMessage()中有Console.WriteLine()。 如果有一种更简单的方法来检查内存问题,它仍然会有所帮助。

TcpListener – 如何使用全局IP地址启动服务器

我会用我的全局IP地址启动TcpListener服务器。 我有开放端口和使用DMZ,我的端口8074可用,我应该能够启动此服务器。 我的代码看起来像: IPAddress ip = IPAddress.Parse(“XX.XXX.XX.XXX.XX”); TcpListener server = new TcpListener(ip, Convert.ToInt32(8888)); TcpClient client = default(TcpClient); try { server.Start(); Console.WriteLine(“Server started…”); } catch (Exception ex) { Console.WriteLine(ex.ToString()); }; 我一直有错误看起来像: 激活事件时间持续时间线程exception:抛出exception:System.dll中的“System.Net.Sockets.SocketException”(“请求的地址在此上下文中是不同的”)。 抛出exception:System.dll中的“System.Net.Sockets.SocketException”(“请求的地址在此上下文中是不同的”)5.52s [5780]工作线程 您可以检查是否要在我的IP地址上访问此端口,但无法在此处启动服务器。

使用asyn和await的.net 4.5中的异步TCP服务器,正在发生数据丢失

我必须使用async来实现asnet tcp在.net 4.5中的服务并通过引用我实现服务器的链接来等待 我的服务器代码如下 public class AsyncEchoServer { private int _listeningPort; public AsyncEchoServer( int port) { _listeningPort = port; } public async void Start() { IPAddress ipAddre = IPAddress.Parse(“192.168.2.4”); TcpListener listener = new TcpListener(ipAddre, _listeningPort); listener.Start(); LogMessage(“Server is running”); while (true) { try { var tcpClient = await listener.AcceptTcpClientAsync(); HandleConnectionAsync(tcpClient); } catch (Exception exp) { […]

使用TCP的C#Mutlti-threading文件传输

我正在设计用于从客户端接收文件的TCP服务器。 它为一个客户工作。 但Server需要响应多个客户端。 我不知道如何同时从客户端接收多个文件。 请帮我。 服务器代码: public partial class Form1 : Form { Thread t1; int flag = 0; string receivedPath = “yok”; public delegate void MyDelegate(); private string fileName; public Form1() { t1 = new Thread(new ThreadStart(StartListening)); t1.Start(); InitializeComponent(); } public class StateObject { // Client socket. public Socket workSocket = null; public const […]

使用JavaScript与浏览器进行C#通信

如何从JavaScript传递消息到C#应用程序,我可以用c#中的PHP和tcpListner(但使用PHP需要服务器来托管),我需要localhost与浏览器通信c#应用程序(使用javaScript或任何其他可能的方式) ,浏览器需要将消息传递给在同一个matchine上运行的应用程序 你能用样品建议适当的方法吗?

如何修复TcpClient Ip Header Bad Checksum

我正在使用System.Net.Sockets.TcpClient类,但每当我通过网络发送自定义数据包时,我看到我的wireshark捕获的校验和错误。 我该如何解决?

我怎样才能强行关闭TcpListener

我有一个通过tcpListener进行通信的服务。 问题是当用户重新启动服务时 – 抛出“正在使用的地址”exception,并且服务无法在几分钟左右启动。 是否有任何方法告诉系统终止旧连接,以便我可以打开一个新连接? (我不能只使用随机端口,因为服务无法通知客户端端口是什么,所以我们必须依赖于预定义的端口)

使用TcpListener进行异步/等待或开始/结束?

我已经开始构建一个tcp服务器,它将能够接受许多客户端,并同时从所有客户端接收新数据。 到目前为止,我使用IOCP用于tcp服务器,这非常简单和舒适,但这次我想使用Async / Await技术。 那是在C#5.0中发布的。 问题是,当我开始使用async / await编写服务器时,我发现在tcp中有多个用户服务器用例,async / await tech。 并且常规同步方法将起作用。 这是一个更具体的简单示例: class Server { private TcpListener _tcpListener; private List _clients; private bool IsStarted; public Server(int port) { _tcpListener = new TcpListener(new IPEndPoint(IPAddress.Any, port)); _clients = new List(); IsStarted = false; } public void Start() { IsStarted = true; _tcpListener.Start(); Task.Run(() => StartAcceptClientsAsync()); } […]

TcpListener:检测客户端断开连接,而不是客户端暂时不发送任何数据

我正在寻找在使用TcpListener时如何检测“客户端断开连接”。 所有答案似乎都与此类似: TcpListener:如何检测客户端断开连接? 基本上,从流中读取,如果Read()返回0,则客户端已断开连接。 但这是假设客户端在发送的每个数据流之后断开连接。 我们在TCP连接/断开开销既缓慢又昂贵的环境中运行。 我们建立连接然后发送一些请求。 伪代码: client.Connect(); client.GetStatus(); client.DoSomething(); client.DoSomethingElse(); client.AndSoOn(); client.Disconnect(); Connect和Disconnect()之间的每次调用都会向服务器发送数据流。 服务器知道如何分析和处理流。 如果让TcpListener在没有断开连接的情况下读取循环,则会读取并处理所有消息,但在客户端断开连接后,服务器无法知道它并且它永远不会释放客户端并接受新客户端。 var read = client.GetStream().Read(buffer, 0, buffer.Length); if (read > 0) { //Process } 如果我让TcpListener在读取== 0时删除客户端,它只接受第一个数据流,只是在之后立即丢弃客户端。 当然这意味着新客户可以连接。 呼叫之间没有人为的延迟,但就计算机时间而言,两次呼叫之间的时间当然是“巨大的”,因此总会有一段时间读取== 0,即使这并不意味着客户端已经或应该断开连接。 var read = client.GetStream().Read(buffer, 0, buffer.Length); if (read > 0) { //Process } else { break; //Always executed as soon […]

TcpListener:监听每个地址,包括GPRS IP地址

我们有一个简单的遗留软件,我们需要通过端口15001使用TCP / IP进行通信。我们需要在端口15001上侦听遗留软件以建立连接,然后读取它发送给我们的任何内容。 我们已经在互联网上测试了这个解决方案,它运行得很好。 但是,如果我们通过GPRS TCP / IP网络测试相同的解决方案,则不会。 已经检查了所有基础知识,我们可以ping通GPRS网络中的其他设备,并且端口15001不会被任何防火墙阻止。 那么我的TcpListener可能有问题吗? 它初始化如下: tcpServer = new TcpListener(IPAddress.Any, TCP_PORT); 我假设它监听系统上每个可用的IPv4接口,因为我使用了IPAddress.Any? 有没有人知道这两个网络之间的区别是什么? (即使没有任何区别)如果有什么我需要更改为我的TcpListener?