Tag: tcpclient

是否可以在Socket和TcpClient对象之间进行转换?

这是另一个C#/。NET问题仅基于好奇而不仅仅是一个迫切需要 …… 如果你有一个Socket实例并且你想将它包装在更高级别的TcpClient类中,那可能吗?你会怎么做? 相反,如果你有一个TcpClient实例,是否有可能得到底层的Socket ?

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

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

无需中止或挂起即可立即终止无环线程

我正在实现一个协议库。 这是一个简化的描述。 主函数中的主线程将始终检查网络流上是否有某些数据(在tcpclient中)。 让我们说响应是收到的消息,而线程是一个正在运行的线程。 thread = new Thread(new ThreadStart(function)); thread.IsBackground = true; thread.Start(); while(true){ response = receiveMessage(); if (response != null) { thread.Suspend(); //I am searching for an alternative for the line above and not thread.Abort(). thread2 = new Thread(new ThreadStart(function2)); thread2.IsBackground = true; thread2.Start(); } } 到目前为止一切顺利,在while循环中实际上有更多的消息,并且还有一个用于处理不同类型的传入消息的状态机,但这应该足够了。 (还有不仅仅是函数“function”和“function2”)。 所以无论如何这些函数在这个应用程序中看起来都不清楚,因为协议是程序员隐藏的并且意味着它是一个库。 这意味着协议将启动一些程序员定义的函数作为线程,具体取决于程序在协议中的状态。 因此,如果接收到特殊响应(例如callAnotherFunction消息),我想突然终止一个线程(此处命名为“thread”),让我们说在100毫秒内。 但是我不知道它是在一个循环内执行还是没有循环,并且在它终止之前需要多少处理。 如何在不弃用Suspend或Exceptionthrowing Abort函数的情况下停止这些线程? […]

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

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

TcpClient与服务器通信以保持c#中的活动连接?

我有这个TcpClient代码,工作正常。 它连接到Linux系统上的perl服务器,并接收服务器发送给它的任何东西。 很好地工作。 public static void Main() { foreach (ProtocolConnection tcpConnection in TcpConnectionsList) { ProtocolConnection connection = tcpConnection; ThreadPool.QueueUserWorkItem(_ => { ThreadTcpClient(connection); ManualResetEventTcp.Set(); }); } … Some code… } public static void TcpConnect(ProtocolConnection varConnection) { int retryCountSeconds = varConnection.RetryEverySeconds*Program.MilisecondsMultiplier; int count = 0; while (true) { try { using (var client = new TcpClient(varConnection.IpAddress.ToString(), varConnection.Port) […]

如何修复TcpClient Ip Header Bad Checksum

我正在使用System.Net.Sockets.TcpClient类,但每当我通过网络发送自定义数据包时,我看到我的wireshark捕获的校验和错误。 我该如何解决?

TcpClient写入方法是否保证将数据传递给服务器?

我在客户端和服务器上都有一个单独的线程,它正在向/从套接字读取/写入数据。 我正在使用同步TcpClient im(如文档中所建议): https : //msdn.microsoft.com/cs-cz/library/system.net.sockets.tcpclient%28v=vs.110%29.aspx 当连接关闭时.Read()/。Write()抛出exception。 是否意味着当.Write()方法没有将数据正确传递给另一方时,或者我是否需要实现自定义ACK逻辑 ? 我阅读了Socket和TcpClient类的文档,但没有一个描述这种情况。

如何在C#中检测套接字断开

我正在研究一种客户端/服务器关系,它意味着在不确定的时间内来回推送数据。 我试图克服的问题是在客户端,因为我无法找到检测断开连接的方法。 我已经在其他人的解决方案上进行了几次传递,从捕获IOexception到轮询所有三个SelectMode上的套接字。 我还尝试使用轮询的组合,并检查套接字的“可用”字段。 // Something like this Boolean IsConnected() { try { bool part1 = this.Connection.Client.Poll(1000, SelectMode.SelectRead); bool part2 = (this.Connection.Client.Available == 0); if (part1 & part2) { // Never Occurs //connection is closed return false; } return true; } catch( IOException e ) { // Never Occurs Either } } 在服务器端,尝试向客户端写入“空”字符(\ 0)会强制执行IOexception,服务器可以检测到客户端已断开连接(非常简单)。 在客户端,相同的操作不会产生exception。 […]

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 […]

Tcp Client双向通信帮助

我希望使用客户端和服务器在C#中的两个应用程序或winforms之间进行通信,就像我希望服务器持续监听来自客户端或客户端的传入消息一样,当收到消息时,我想回复发送信息的客户端处理可以任何一个帮助代码示例