Tag: tcp

如何通过TcpClient获取页面?

我正在尝试通过TCP流向页面发送GET请求。 这是我的代码的样子: public class SocketLevelWebClient { public string SendWebRequest(string url, string request) { using(TcpClient tc = new TcpClient()) { tc.Connect(url, 80); using (NetworkStream ns = tc.GetStream()) { using (System.IO.StreamWriter sw = new System.IO.StreamWriter(ns)) { using (System.IO.StreamReader sr = new System.IO.StreamReader(ns)) { sw.Write(request); sw.Flush(); return sr.ReadToEnd(); } } } } } 请求本身: SocketLevelWebClient wc = new […]

为什么我的客户端服务器套接字连接保持断开连接

我使用套接字在C#.NET中有一个客户端服务器应用程序写入器。 我经常收到日志消息(比如每小时大约4个)说这条消息, An existing connection was forcibly closed by the remote host 在这种情况下,错误发生在“服务器”端。 我决定使用wireshark来分析发生了什么,我得到了这个。 没有延迟,这一切都在几秒钟内发生。 Server > Client [PSH, ACK] Seq=55653 Ack=4472 Win=63940 Len=148 Client > Server [ACK] Seq=4472 Ack=55801 Win=4038 Len=0 Server > Client [PSH, ACK] Seq=55801 Ack=4472 Win=63940 Len=148 Client > Server [ACK] Seq=4472 Ack=55949 Win=4001 Len=0 Server > Client [PSH, ACK] Seq=55949 […]

简单的客户端/服务器,TCP / IP加密消息流,SSL

编写一个小的TCP / IP客户端服务器应用程序。 基本上它创建了一个服务器,然后你可以创建几个不同的客户端并设置一些聊天会话。 我想知道有没有办法合并,使用标准的.net库某种forms的加密? m_mainSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); 有没有办法使用rsa来表示tcp? 或者你(我是)必须写一些自定义库来进行密钥交换,然后加密后续的聊天消息? 我之前已经为uni做过,但那是在java中,但我知道转换它们并不困难。 只是试图不必重新发明轮子…… 或者使用ssl怎么样? 谢谢,罗恩。

Windows过滤平台,用于从托管代码中过滤HTTPS

我想为Windows开发基于主机的防火墙主要是为了过滤以HTTPS开头的URL! 我知道微软正在推出WFP,以替代已弃用的旧技术,如防火墙/filter挂钩,NDIS,TDI,WSA和Winsock 2(LSP)。 但WFP目前不支持使用主机名或URL的filter。 此外,WFP仅在C / C ++中,并且.NET中没有可用的C#包装器。 我尝试了@basil的WinDivert演示应用程序webfilter,它解析TCP端口80(默认HTTP)上的IPv4出站流量中的数据包,重置服务器连接(TCP RST)并向客户端(浏览器)发送HTML响应,然后发送TCP FIN如果URL匹配文本文件中给出的任何列入黑名单的条目作为命令行参数,否则重新注入它们… handle = WinDivertOpen( “outbound && ” // Outbound traffic only “ip && ” // Only IPv4 supported “tcp.DstPort == 80 && ” // HTTP (port 80) only “tcp.PayloadLength > 0”, // TCP data packets only WINDIVERT_LAYER_NETWORK, priority, 0 ); 我的问题是:我可以更改此代码以支持HTTPS(将端口更改为默认443)以及IPv6吗? 如果是这样,我愿意编写一个P \ Invoke包装类来从托管C#代码中调用它。 额外:可以使用SSH隧道绕过此解决方案,还有另一种绕过它的方法吗?

你可以通过TcpClient发送比SendBufferSize更大的文件吗?

我正在尝试.NET中的Tcp连接,我想发送一些大于TcpClient对象的SendBufferSize比例的数据。 是否可以通过简单地写入网络流来发送数据,还是需要将其切换到pices并发送,然后在另一端创建它?

如何使用TcpClient对上传进行速率限制?

我正在编写一个将上传大量文件的实用程序,并希望提供限速上传的选项。 使用TcpClient类时,限速上传的最佳方法是什么? 我的第一个本能是一次调用具有有限字节数的NetworkStream.Write(),在调用之间hibernate(如果尚未写入流,则跳过调用),直到缓冲区被上传。 有没有人之前实现过这样的东西?

Silverlight套接字:模仿框架Bind,Listen和Accept方法?

我有这个.NET Framework C#类,它实际上充当System.Net.Sockets命名空间中Socket类周围的TCP连接的包装器。 最近我已将此包装类的API迁移到Silverlight,但由于Silverlight中Socket类的限制 ,以及关于可用端口,客户端访问策略等的正常信任限制,我只实现了网络客户端支持我的Silverlight版本。 现在,使用Silverlight 5(RC) ,即使对于浏览器内SL应用程序也可以应用提升的信任,这样就删除了我在SL 4中必须遵守的所有端口和客户端访问策略限制。 我的问题是,如果还有一种方法可以在我的SL包装器类中实现某种网络服务器支持? 更具体地说,Silverlight中有一种方法可以模仿.NET Framework Socket类的Bind,Listen和Accept方法吗? 为了模仿Socket.Connect,我在Silverlight Socket类中使用了ConnectAsync方法。 可以使用例如Receive(From)Async对Bind / Listen / Accept方法做类似的事情吗? 提前致谢。

发送大于SendBufferSize的数据时,如何接收数据?

我刚刚问了一个关于如何发送大于SendBufferSize的数据的问题,答案是将在几个部分发送。 我的第二个问题是这些数据将如何收到? 它会在网络流中完成还是会被分割。 第一个问题: 你能发送一个比TcpClient更大的SendBufferSize文件吗?

套接字ReceiveAsync合并数据包

我打算通过套接字接收数据包,但由于它们是从发送方以高频率发送的,因此它们中的一些被打包成单个byte数组。 然后SocketAsyncEventArgs.Buffer保存多个数据包,即使它们是单独发送的(使用wiresharkvalidation)。 我已经尝试对传入的数据包进行排队并异步处理它们,但我仍然得到相同的结果。 这种行为可能是什么原因?

没有协议的C#SuperSocket

问题很简单:我已经阅读了整个SuperSocket文档但我不明白是否有一种方法可以在没有实现协议的情况下使用它。 我不需要发送特定命令,只需要发送一个或几百个字节,具体取决于许多因素。 我需要更新一个使用简单套接字的旧TCP服务器,它是我4年多前使用System.Net.Sockets libs制作的,我想用SuperSocket作为一个更好的解决方案使用一个好的笔记库。 这是个好主意吗? 先感谢您。