Tag: tcp

具有多个客户端的TCP服务器

我正在研究TCP服务器/客户端应用程序。 我的问题是: 我的服务器应用程序启动一个新线程并阻止它,直到接受了listenforClient方法的连接 但是,如何在多个客户端连接到我的服务器时管理连接,并且他们同时请求不同的东西我如何管理客户端1获取其需要的信息以及客户端2的相同信息。 它是multithreading的,因此多个客户端可以连接,但我如何处理请求。 我不想把所有东西放在1方法中。 提前致谢 private void serverstart() { this.tcplistener = new TcpListener(IPAddress.Any, 49151); this.listenThread = new Thread(new ThreadStart(ListenForClients)); this.listenThread.Start(); } private void ListenForClients() { this.tcplistener.Start(); while (true) { //blocks until a client has connected to the server TcpClient client = this.tcplistener.AcceptTcpClient(); // here was first an message that send hello client // […]

WCF性能,延迟和可伸缩性

我正在尝试将F#中的简单异步TCP服务器移植到C#4。服务器接收连接,读取单个请求并在关闭连接之前流回一系列响应。 C#4中的异步看起来很乏味且容易出错,所以我想我会尝试使用WCF。 该服务器不太可能在野外看到1,000个同时发出的请求,因此我认为吞吐量和延迟都很重要。 我在C#中编写了一个最小的双工WCF Web服务和控制台客户端。 虽然我使用的是WCF而不是原始套接字,但这已经是175行代码,而原始代码只有80行。 但我更关注性能和可扩展性: WCF的延迟是154倍。 WCF的吞吐量低54倍。 TCP可以轻松处理1,000个并发连接,但WCF仅在20个时间内阻塞。 首先,我正在使用所有内容的默认设置,所以我想知道是否有任何我可以调整以改善这些性能数据? 其次,我想知道是否有人正在使用WCF进行此类事情,或者它是否是错误的工具? 这是我在C#中的WCF服务器: IService1.cs [DataContract] public class Stock { [DataMember] public DateTime FirstDealDate { get; set; } [DataMember] public DateTime LastDealDate { get; set; } [DataMember] public DateTime StartDate { get; set; } [DataMember] public DateTime EndDate { get; set; } [DataMember] public decimal Open […]

使用c#“UDP打孔到防火墙”将端口X的流量从端口X转发到计算机B

我需要建立从家用计算机到办公室计算机的TCP连接。 在办公室有一台路由器连接了几台计算机。 该路由器具有互联网,因此连接到该路由器的所有计算机也具有互联网。 在我的房子里我有一台可以上网的电脑。 我需要我的办公室电脑作为服务器和我的家用电脑连接到它。 之前,我曾经能够通过端口转发服务器上的流量连接: NATUPNPLib.UPnPNATClass upnpnat; NATUPNPLib.IStaticPortMappingCollection mappings; public ServerExample() { InitializeComponent(); upnpnat = new NATUPNPLib.UPnPNATClass(); mappings = upnpnat.StaticPortMappingCollection; // server local IP address mappings.Add(1300, “TCP”, 1300, “192.168.150.146”, true, “plsease work”); // this code tels the router to forward all tcp traffic comming from port // 1300 to the server computer (it’s lan […]

如何在C#中确定Windows进程使用的tcp端口

是否有托管类/方法可以提供特定Windows进程使用的TCP端口号? 我真的在寻找以下CMD系列的.NET等价物: netstat -ano |find /i “listening”

如何从NetworkStream获取所有数据

我试图读取通过TCP/IP连接的机器缓冲区中存在的所有数据,但我不知道为什么我没有得到所有数据,一些数据正在错过。 这是我正在使用的代码.. using (NetworkStream stream = client.GetStream()) { byte[] data = new byte[1024]; int numBytesRead = stream.Read(data, 0, data.Length); if (numBytesRead > 0) { string str= Encoding.ASCII.GetString(data, 0, numBytesRead); } } 请告诉我我缺少什么来从机器获取所有数据。 提前致谢..

如何在c#中将大文件拆分成块?

我正在通过电线制作一个简单的文件传输发送器和接收器应用程序。 到目前为止,我发送的是发送方将文件转换为字节数组,并将该数组的块发送给接收方。 这适用于高达256mb文件,但上面的任何内容,行: byte[] buffer = StreamFile(fileName); //This is where I convert the file Throws a System out of memory exception. 我正在寻找一种方法来读取块中的文件然后写入该块而不是将整个文件加载到一个byte 。 我怎么能用FileStream做到这一点? 编辑: 对不起,到目前为止,这是我糟糕的代码: private void btnSend(object sender, EventArgs e) { Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); byte[] fileName = Encoding.UTF8.GetBytes(fName); //file name byte[] fileData = null; try { fileData = StreamFile(textBox1.Text); […]

异步服务器套接字多个客户端

我一直在使用msdn上发布的以下代码: http://msdn.microsoft.com/en-us/library/fx6588te.aspx 我知道在应用程序等待新客户端时,服务器应用程序未被阻止。 但是,此应用程序(甚至套接字)可以处理多个并发请求吗? 如果客户A和B同时连接会发生什么? 如果客户端A连接并且其请求的处理需要5秒钟,如果客户端B稍后连接,则它必须等待客户端A完成才能开始处理吗? 或者客户A和客户B的请求是否会同时处理? 我已经通过将Thread.Sleep(n)命令放在套接字侦听器代码中的接收/发送数据之间进行了一些测试。 然后,我可以向套接字发送多个请求,并且它们似乎已被处理。 但是套接字总是在同一个线程id上处理它们 – 这让我相信它实际上并不是同时发生的。 特别是微软的描述,这个应用程序在等待新连接时根本没有阻止 – 这是否意味着它可以处理并发连接?