Tag: 套接字

UDP服务器中接收数据包的连接重置

我正在研究一个服务器应用程序(C#,.NET 4.0),它需要每秒处理数千个UDP数据包。 所以我决定使用SocketAsyncEventArg来实现服务器。 我面临的问题是我的实现只收到一个数据包然后我得到“ConnectionReset”错误(我从未想过我会得到这个错误,因为UDP是无连接的)。 这是我的测试实现: using System; using System.Net; using System.Net.Sockets; static class Program { static void Main(string[] args) { UdpEchoServer.Start(); while (true) { Console.ReadLine(); SendPacket(); } } static void SendPacket() { Console.WriteLine(“SendPacket”); var c = new UdpClient(); c.Send(new byte[5], 5, new IPEndPoint(IPAddress.Parse(“127.0.0.1”), 445)); c.Close(); } } static class UdpEchoServer { static Socket mSocket; static […]

单声道兼容网络/套接字库

那里有没有Mono(C#)兼容的网络/套接字库吗? 最好是: 多螺纹 事件驱动 能够连接多个 处理客户端和服务器件 运行Mono和MS .NET运行时 非常简单 免费(可在商业软件中使用) 如果它是:它真的很棒: .NET Compact Framework(Windows Mobile)兼容 MonoTouch(iPhone)兼容 编辑: 为了澄清更多,我的“高于TCP / IP的一级”评论意味着我想要的东西基本上是一个自包含的服务器/客户端。 我不想处理编写线程代码,处理每个连接等等。例如,我希望代码看起来像这样: Server s = new Server(8080); s.NewConnection += new ConnectionEventHandler(NewConnection); s.DataRecieved += new DataEventHandler(NewData); s.Start(); void NewConnection(object sender, EventArgs e) { s.Send((Connection)sender, “Hello World!”); //(Connection)sender is the connection instance so the server knows which to […]

TCP重置后随机“远程主机强制关闭现有连接。”

我有两个部分,一个客户端和一个服务器。 我尝试从客户端向服务器发送数据(大小> 5840字节),然后服务器将数据发回。 我循环这次,每次等待一秒钟。 有时服务器应用程序崩溃,崩溃似乎非常随机的错误: 未处理的exception:System.IO.IOException:无法从传输连接读取数据:远程主机强制关闭现有连接。 —> System.Net.Sockets.SocketException:远程主机强制关闭现有连接 在System.Net.Sockets.Socket.Receive(Byte []缓冲区,Int32偏移量,Int32大小,SocketFlags socketFlags) 在System.Net.Sockets.NetworkStream.Read(Byte []缓冲区,Int32偏移量,Int32 siz) —内部exception堆栈跟踪结束— 在System.Net.Sockets.NetworkStream.Read(Byte []缓冲区,Int32偏移量,Int32 siz) at TCP_Server.Program.Main(String [] args) 客户端代码(这在循环内): try { Int32 port = 13777; using (TcpClient client = new TcpClient(ip, port)) using (NetworkStream stream = client.GetStream()) { client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true); var data = GenerateData(size); sw.Start(); // Send the message to […]

从麦克风听到传入的音频

我只是想听听我对使用NAudio的麦克风所说的话,这是我的代码到目前为止,但问题是我听不到任何声音。 任何帮助,将不胜感激。 public partial class frmMain : Form { private WaveIn waveIn; // Gets an audio from microphone private WaveOut waveOut; // Sends audio to speaker private BufferedWaveProvider waveProvider; // Gets an audio from stream public frmMain() { InitializeComponent(); } private void frmMain_Load(object sender, EventArgs e) { waveOut = new WaveOut(); waveIn = new WaveIn(); […]

.NET NetworkStream读取缓慢

我有一些网络代码来处理任意TCP连接。 这一切似乎按预期工作,但似乎很慢。 当我对代码进行分析时,似乎在NetworkStream.Read()中花费了600毫秒,我想知道如何改进它。 我已经摆弄了缓冲区大小,并在一个巨大的缓冲区之间交替,一次性读取所有数据或者将数据连接到StringBuilder中的小数据。 目前我正在使用的客户端是一个Web浏览器,但是这个代码是通用的,它可能不是发送给它的HTTP数据。 有任何想法吗? 我的代码是这样的: public void StartListening() { try { lock (oSyncRoot) { oTCPListener = new TcpListener(oIPaddress, nPort); // fire up the server oTCPListener.Start(); // set listening bit bIsListening = true; } // Enter the listening loop. do { // Wait for connection TcpClient newClient = oTCPListener.AcceptTcpClient(); // queue a request to […]

Socket.EndRead 0字节意味着断开连接?

我想知道在c#中的异步套接字中,在EndRead调用中接收0个字节意味着服务器实际上已经断开了我们的连接吗? 我看到的很多例子都表明情况就是如此,但我收到的连接断开频率要高得多。 这段代码是否正确? 或者endResult <= 0对连接状态没有任何意义? private void socket_EndRead(IAsyncResult asyncResult) { //Get the socket from the result state Socket socket = asyncResult.AsyncState as Socket; //End the read int endResult = Socket.EndRead(asyncResult); if (endResult > 0) { //Do something with the data here } else { //Server closed connection? } }

使用套接字的简单Http代理:问题

我正在尝试学习C#中套接字的工作原理。 我的想法是编写一个简单的http代理:这是我的代码: using System; using System.IO; using System.Net; using System.Net.Sockets; using System.Text; using System.Text.RegularExpressions; using System.Threading; class Program { static void Main(string[] args) { ThreadPool.SetMaxThreads(1000, 500); ThreadPool.SetMinThreads(500, 250); TcpListener listener = new TcpListener(IPAddress.Any, 8282); listener.Start(); while (true) { Socket client = listener.AcceptSocket(); ThreadPool.QueueUserWorkItem(ProcessSocket, client); } } private static readonly string patternHostPort = @”(Host:\s)(\S+)(:)(\d+)”; private static […]

C#套接字编程

嘿,我正在做C#异步套接字编程的噩梦。 你能指点我一本指南或教程或一本深入解释异步编程的书。 如果可能包含如何使用Begin Send / Receive函数中的state参数来处理多个客户端。

System.Net.Mail.SMTPClient如何执行其本地IP绑定

我们有一个负载均衡(NLB)ASP.NET Web应用程序,它发送电子邮件。 服务器是双归属的,具有面向外部和内部(在防火墙后面)面向IP。 邮件服务器位于防火墙后面。 我们一直在遇到一个问题,即SMTPClient类抛出exception,指出它无法连接到SMTP服务器。 网络人员告诉我们他们正在尝试从面向外部的IP地址(防火墙阻止)连接到SMTP服务器 从我对网络启用的应用程序的知识(不可否认的)我认为本地IP绑定将根据目的地决定,即如果路由表说IP地址可以通过特定的NIC访问,那么IP就是出站请求是从…生成的。 我错了吗? 看着SmtpClient.ServicePoint我开始认为我们可能并且我们可以(应该)强制显式绑定到特定的IP? 特别是我一直在看 该页面的ServicePoint.BindIPEndPointDelegate属性 …… 备注:某些负载平衡技术要求客户端使用特定的本地IP地址和端口号,而不是IPAddress.Any(或Internet协议版本6的IPAddress.IPv6Any)和临时端口。 您的BindIPEndPointDelegate可以满足此要求。 对我来说这似乎有点奇怪,我需要这样做,但也许在这种环境中常见?

聊天服务申请

我正在为游戏做聊天服务, 我正在使用TCP侦听器客户端来获取帐户信息,某种登录服务。 我想知道我是否可以保持连接到服务器的客户端,以检查他是否还在线,并且如果他有新消息则继续向他发送消息。 我已经尝试为登录队列创建一个套接字列表,但是一旦我接受了一个新套接字,它就会将前一个套接字断开连接到服务器。 byte[] usernameByte = new byte[100]; int usernameRecieved = s.Receive(usernameByte); //guiController.setText(System.DateTime.Now + ” Recieved Login…”); byte[] passByte = new byte[100]; int passRecieved = s.Receive(passByte); //guiController.setText(System.DateTime.Now + ” Recieved Password…”); string username = “”; string password = “”; for (int i = 0; i < usernameRecieved; i++) username += (Convert.ToChar(usernameByte[i])); for (int i […]