Tag: tcplistener

TcpListener排队连接的速度比我清除它们的速度快

据我了解,一旦调用Start() , TcpListener将对连接进行排队。 每次调用AcceptTcpClient (或BeginAcceptTcpClient )时,它都会从队列中取出一个项目。 如果我们通过立即向它发送1,000个连接来加载测试我们的TcpListener应用程序,那么队列构建的速度远远超过我们清除它的速度,导致(最终)从客户端超时,因为它没有得到响应,因为它的连接仍在队列。 然而,服务器似乎没有太大的压力,我们的应用程序没有消耗太多的CPU时间,并且机器上的其他受监控资源也没有出汗。 感觉我们现在还没有足够高效地运行。 我们调用BeginAcceptTcpListener然后立即切换到ThreadPool线程来实际完成工作,然后再次调用BeginAcceptTcpClient 。 所涉及的工作似乎没有对机器施加任何压力,它基本上只是一个3秒的睡眠,然后是字典查找,然后是100字节写入TcpClient的流。 这是我们使用的TcpListener代码: // Thread signal. private static ManualResetEvent tcpClientConnected = new ManualResetEvent(false); public void DoBeginAcceptTcpClient(TcpListener listener) { // Set the event to nonsignaled state. tcpClientConnected.Reset(); listener.BeginAcceptTcpClient( new AsyncCallback(DoAcceptTcpClientCallback), listener); // Wait for signal tcpClientConnected.WaitOne(); } public void DoAcceptTcpClientCallback(IAsyncResult ar) { // Get the listener […]

通常只允许使用每个套接字地址(协议/网络地址/端口)?

我一直在谷歌寻找一个严肃的解决方案,我只得到“Regisrty解决方案”的东西,我不认为甚至与我的问题有关。 由于某种原因,我得到这个错误,而我只启动一次TcpListner,当+如果失败我停止服务器。 我真的不明白。 这是我的代码: class Program { private static string ServerName = “”; private static string UserName = “”; private static string Password = “”; private static string dbConnectionSring = “”; private static X509Certificate adminCertificate; private static byte[] readBuffer = new byte[4096]; static void Main(string[] args) { Console.WriteLine(“Please grant SQL Server access to the Admin […]

在C#中接收和发送数据

我还在努力提高我之前写的一点点。 现在我遇到了接收数据的问题。 我有一个程序,我用它来发送字符串使用tcpClient到一个程序,我在其中侦听指定的端口。 它工作正常,所以我决定再向前发送数据 public static void receiveThread() { while (true) { TcpListener tcpListener = new TcpListener(IPAddress.Any, port); tcpListener.Start(); Console.WriteLine(“Waiting for connection…”); TcpClient tcpClient = tcpListener.AcceptTcpClient(); Console.WriteLine(“Connected with {0}”, tcpClient.Client.RemoteEndPoint); while (!(tcpClient.Client.Poll(20, SelectMode.SelectRead))) { NetworkStream networkStream = tcpClient.GetStream(); StreamReader streamReader = new StreamReader(networkStream); data = streamReader.ReadLine(); if (data != null) { Console.WriteLine(“Received data: {0}”, data); […]

如何使用C#4.0编写可伸缩的套接字服务器?

我想编写一个简单的套接字服务器,但是我希望它可以垂直扩展,例如,不是每个连接创建一个线程,也不是很长时间运行的任务,这可能会占用所有线程。 服务器接收包含查询的请求并流式传输任意大的结果。 我希望使用C#4中提供的技术和库来实现这一点的惯用方法,重点是简单的代码,而不是原始性能。 重新打开套接字服务器是可伸缩系统的有用部分。 如果要水平缩放,则有不同的技术。 如果您从未创建套接字服务器,则应该无法回答此问题。

你如何发现TCPListener服务的IP地址?

从LAN上的另一台计算机向TcpListener服务发送消息时,您需要知道服务器的IP地址和端口。 该端口很可能已经知道,因为您可能已经选择了该端口,但如果IP地址可能不同,您是否可以通过某种方式发现该IP地址。 在我看来,您需要通过另一种方法向发件人提供此信息。

如何在C#中停止一个线程?

我已经创建了一个客户端 – 服务器应用程序,并且在服务器上我希望有机会停止服务器,然后再次启动它。 问题是我无法阻止侦听Tcp连接的线程。 如何在C#中关闭线程? 谢谢。 private void KeepServer(){ while (this.connected) { tcpClient = tls.AcceptTcpClient(); Connection newConnection = new Connection(tcpClient); } }

TcpClient – 远程主机强制关闭现有连接

信息 我一直在用c#开发一个web http服务器,并决定添加一个远程控制台function。 控制台可以在任何位置使用,并使用TcpListener(Web服务器)和TcpClient(远程控制台)来发送命令和function。 代码 这就是我的服务器的样子: TcpListener consoleListener = new TcpListener(consolePort); consoleListener.Start(); byte[] bytes = new Byte[256]; string data = null; while (true) { TcpClient client = consoleListener.AcceptTcpClient(); data = null; byte[] msg = { 0 }; int i; while ((i = client.GetStream().Read(bytes, 0, bytes.Length)) != 0) { data = System.Text.Encoding.ASCII.GetString(bytes, 0, i); if (data […]

发送二进制文件TcpClient – 文件大于源

为了让我的脚趾在网络编程的水中,我写了一个小的控制台应用程序将png文件发送到服务器(另一个控制台应用程序)。 服务器正在写入的文件略大于源png文件。 它不会打开。 客户端应用程序的代码是: private static void SendFile() { using (TcpClient tcpClient = new TcpClient(“localhost”, 6576)) { using (NetworkStream networkStream = tcpClient.GetStream()) { //FileStream fileStream = File.Open(@”E:\carry on baggage.PNG”, FileMode.Open); byte[] dataToSend = File.ReadAllBytes(@”E:\carry on baggage.PNG”); networkStream.Write(dataToSend, 0, dataToSend.Length); networkStream.Flush(); } } } Server应用程序的代码是: private static void Main(string[] args) { Thread thread = new Thread(new […]

序列化对象准备通过TCPClient Stream发送

我已经使用TcpListener和TcpClient设置了服务器和客户端。 我想将一个对象发送到我的服务器应用程序进行处理。 我已经发现了using System.Runtime.Serialization和以下文档 ,但我不想发现我正在以漫长的方式做这件事。 问题:通过TCP流处理和发送对象的最佳方法是什么? 发送和接收。 这是我的对象的一个​​例子: // Create a new house to send house newHouse = new house(); // Set variables newHouse.street = “Mill Lane”; newHouse.postcode = “LO1 BT5”; newHouse.house_number = 11; newHouse.house_id = 1; newHouse.house_town = “London”;

无法使用StreamSocket连接到TcpListener

我在移动设备上有一个应用程序连接到桌面上的服务器应用程序我在桌面上使用TcpListener,在移动设备上使用TcpClient。 我试图添加对Windows 8的支持,但似乎Microsoft删除了它,现在我们应该使用StreamSocket作为TcpClient和StreamSocketListener作为TcpListener。 我试图更改我的代码,但它甚至没有连接到我的TcpListener。 (请注意,我在台式机上也使用了异步)。 我桌面上的TcpListener: server = new TcpListener(Constants.DEFAULT_PORT); server.Start(); server.BeginAcceptSocket(new AsyncCallback(OnAccept), null); 我的Windows 8上的StreamSocket: var client = new StreamSocket(); await client.ConnectAsync(new EndpointPair(new HostName(“localhost”), “7800”, new HostName(“localhost”), “7800”)); 它通过ConnectAsync线而没有连接,因为桌面上的OnAccept未被调用。 所以我不知道这里有什么不对。