Tag: 套接字

套接字编程有哪些替代方案?

我正在浏览编程故障排除程序,我想知道插槽编程的替代方案是什么; 如果有的话。

套接字ReceiveTimeout

我已将ReceiveTimout指定为40 ms。 但是接收超时需要500ms以上。 我正在使用秒表来计算时间戳。 代码如下所示。 Socket TCPSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); TCPSocket.ReceiveTimeout = 40; try { TCPSocket.Receive(Buffer); } catch(SocketException e) { }

实现http / https和socks代理的库

我寻找实现http / https和socks-proxy的库。 我试着谷歌它,但我发现的唯一的类/ libs实现了袜子没有袜子ssl或ssl。 也许任何人都有这个问题的解决方案,或者你可以给我一个建议如何自己实现它也有帮助。 Thx提前。 PS 似乎这个琐碎的技术.NET只有商业解决方案我不能相信它!?

Socket.BeginReceive合并TCP数据包

是否有一个设置我可以用来防止将多个TCP数据包合并到Socket.BeginReceive回调中的单个缓冲区? 你的下意识反应是我无法阻止TCP分裂/合并数据,但这不是我要求的 ; 我可以清楚地看到在Wireshark中收到的各个数据包,我唯一关心的是延迟,即一旦到达就处理该段。 这并不意味着我不知道如何处理拆分/合并段,但这意味着我想避免延迟。 我的代码如下所示: void WaitForData(ISocketInfo soc) { if (socket != null && socket.Connected) socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, OnPacketReceived, socket); } void OnPacketReceived(IAsyncResult asyn) { try { var socket = (ISocketInfo)asyn.AsyncState; numberOfBytesReceived = socket.EndReceive(asyn); if (numberOfBytesReceived > 0) { _queue.Enqueue(buffer, 0, numberOfBytesReceived); OnNewDataReceived(); } WaitForData(socketInfo); } catch (SocketException ex) { Log.Warn(“Socket error while […]

将分块数据从Socket接收到单个缓冲区

我正在尝试使用套接字编写一个简单的SNPP(简单网络分页协议)客户端。 除了服务器之间的小的不一致之外,一切似乎都运行良好。 当我发送命令时,我需要读取回复,这通常是一块数据。 但是,Sprint的SNPP服务器分两部分发送回复。 第一个数据块是状态代码的第一个数字。 第二个块是剩余部分。 例如,当我尝试接收“220 Gateway ready”回复时,它会像这样到达: 2 我必须发送另一个空命令来检索其余的: 20 Gateway ready 目前,我正在使用: byte[] buffer = new byte[256]; socket.Receive(buffer); 如何在发出命令后确保收到所有可用数据而不为每个数据块分配单独的缓冲区?

我如何知道我的电脑是否未连接到网络?

我正在制作局域网聊天应用程序(服务器和客户端程序),我想知道如何获得自己计算机的IP地址(对于服务器程序)并找到了这个问题 。 我在我的程序中使用了代码并测试了它,而我的计算机没有连接到互联网,LAN或任何外部设备,我认为代码会因此而抛出exception(并且意味着我的计算机没有连接任何网络)…但它没有,而是返回了一个IP地址。 有没有办法找出我的电脑是否没有连接到任何网络?

使用异步套接字的多个套接字连接

我有以下代码,使TCP套接字连接到多个端点,如下所示: private async void button1_Click(object sender, EventArgs e) { var listofIps = new List { “192.168.168.193”, “192.168.168.221” }; foreach (var ip in listofIps) { IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(ip), 4001); Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sockets.Add(client); await client.ConnectTaskAsync(remoteEP); await ReadAsync(client); } } async Task ReadAsync(Socket s) { var args = new SocketAsyncEventArgs(); args.SetBuffer(new […]

Socket.Select(),-1超时根本没有阻塞

我在多个套接字上调用Socket.Select并希望整个线程阻塞,直到一个(或多个)套接字准备就绪。 文档说如果你给出超时-1,超时应该是无穷大。 然而,它几乎自动返回。 我使用的是.NET 3.5。 这是我的代码: Socket.Select(socketAVerifier, null, null, -1); foreach (var socketsPrets in socketAVerifier) { switch (socketsPrets.ProtocolType) { case ProtocolType.Tcp: AccepterConnection(); break; case ProtocolType.Udp: EcouterBroadcast(); break; default: Journal.WriteLine(“Socket de protocol inconnu” + socketsPrets.ProtocolType, “Serveur”, Niveaux.Grave); break; } } 有没有办法调用选择阻止?

为什么我在20%繁忙的机器上得到IPC延迟

我在一台拥有10个内核且运行47个ClientApp实例的机器上的IPC出现延迟,这些实例都与MasterApp通信。 我偶尔会遇到严重的延迟。 这是我的日志的一部分。 左边的DateTime是日志DateTime(高性能记录器)。 []中的DateTimes是从MasterApp发送消息的时间。 每条消息都以@结尾。 所以第一条消息仅落后1毫秒,但最后消息落后71毫秒。 任何可能导致这种情况的想法以及我可以做些什么来消除延迟 20141030T120401.015 [——–*MD|USD/JPY 109.032 109.034 1000000.00 1000000.00 20141030T120401014@] 20141030T120401.084 [——–*MD|EUR/CHF 1.20580 1.20588 3000000.00 2000000.00 20141030T120401019@] 20141030T120401.163 [——–*MD|USD/JPY 109.031 109.034 1000000.00 1000000.00 20141030T120401088@*MD|EUR/CHF 1.20580 1.20588 3000000.00 1000000.00 20141030T120401092@] 代码摘录: public void Connect(int port) { IPAddress[] aryLocalAddr = null; String strHostName = “”; try { // NOTE: DNS lookups are […]

C#发送/接收字节大小(套接字)的问题

我已经使这些代码发送和接收带有TCP套接字的图像但接收代码不起作用。 这是发送代码 : public void SendImage() { int ScreenWidth = Screen.GetBounds(new Point(0, 0)).Width; int ScreenHeight = Screen.GetBounds(new Point(0, 0)).Height; Bitmap bmpScreenShot = new Bitmap(ScreenWidth, ScreenHeight); Graphics gfx = Graphics.FromImage((Image)bmpScreenShot); gfx.CopyFromScreen(0, 0, 0, 0, new Size(ScreenWidth, ScreenHeight)); bmpScreenShot.Save(Application.StartupPath + “/ScreenShot.jpg”, ImageFormat.Jpeg); byte[] image = new byte[1]; bmpScreenShot = ResizeBitmap(bmpScreenShot, 300, 300); image = ImageToByte(bmpScreenShot); //get the […]