草庐IT

c# - 程序退出后 TcpListener Socket 仍然有效

我正试图在我的程序退出时停止TCP监听器。我不关心套接字或任何事件客户端套接字上当前事件的任何数据。套接字清理代码本质上是:try{myServer.Server.Shutdown(SocketShutdown.Both)}catch(Exceptionex){LogException(ex)}myServer.Server.Close(0)myServer.Stop()myServer是一个TCPListener在某些情况下,Shutdown会抛出异常System.Net.Sockets.SocketException:发送或接收数据的请求被禁止,因为套接字未连接并且(当使用send

c# - 将 OwinHttpRequestContext 转换为 HttpContext? (IHttpHandler 和 websockets)

我正在尝试在当前实现RESTfulWebAPI的应用程序中实现Web套接字。我希望某些信息能够通过Web套接字连接公开,因此我想弄清楚如何将普通HTTP请求升级为Web套接字连接。我正在尝试关注这个tutorial我遇到的问题是我的Controller处理继承自ApiController的Get请求,我正在尝试这样做:if(HttpContext.Current.IsWebSocketRequest){HttpContext.Current.AcceptWebSocketRequest(SomeFunction);}returnnewHttpResponseMessage(HttpSt

c# - 取消 Socket.xxxxAsync 调用

调用Socket.Shutdown、Socket.Close和Socket.Disconnect后,Socket.ReceiveAsync似乎没有中止。尝试重用ReceiveAsync调用中使用的SocketAsycEventArgs对象(在文档中作为最佳实践建议)会导致错误:AnasynchronoussocketoperationisalreadyinprogressusingthisSocketAsyncEventArgsinstance我必须做什么才能让ReceiveAsync释放它对这个SocketAsyncEventArgs实例的控制?编辑:我通过标记一个待处理的接收并且在

c# - 如何防止 .NET 库在关闭时发送 RST 数据包

我正在做一些测试,试图隔离库(.NET)中的一些奇怪行为。当我通过C++使用WinsockAPI并简单地调用closesocket()时,我看到Windows端发送FIN/ACK数据包,而远程端发回ACK数据包。这就是我所说的优雅结束。但是,在使用C#进行编程时,我没有看到所谓的优雅关闭。在C#中,我打开我的套接字,然后在关闭它时,我看到Windows在第一次调用Socket.Shutdown()时仅发送一个FIN数据包。但是,无论如何,当我在C#中调用Socket.Close()时,都会发送一个RST数据包并且连接会立即断开。这让我感到困惑,因为根据我在网上阅读的内容,TCP关闭过程

c# - 有没有办法指定在 tcpClient 中使用的本地端口?

我目前正在使用这个函数调用来创建我的tcpClient:clientSocket=newTcpClient("localhost",clientPort);但是clientPort是服务器的端口。有没有办法让我使用tcpClient指定客户端端口?谢谢 最佳答案 constructoroverloadthattakesanIPEndPoint允许您将TcpClient的内部套接字绑定(bind)到特定端口:IPAddressipAddress=Dns.GetHostEntry(Dns.GetHostName()).AddressLi

c# - 使用 C# 通过套接字发送和接收图像

我正在尝试在C#中设置两个程序。基本上,我希望服务器设置一个简单的客户端服务器来监听来自客户端的图像。然后,在收到图像后,将其显示在PictureBox中。我一直遇到以下错误:Afirstchanceexceptionoftype'System.ArgumentException'occurredinSystem.Drawing.dll错误发生在监听这一行的服务器代码上:图片bmp=Image.FromStream(ms);有任何想法吗?监听的Server代码:usingSystem;usingSystem.Collections.Generic;usingSystem.Compone

C# Begin/EndReceive - 如何读取大数据?

当以1024字节的block读取数据时,我如何继续从接收大于1024字节的消息的套接字中读取数据,直到没有数据为止?我是否应该只使用BeginReceive只读取数据包的长度前缀,然后一旦检索到,使用Receive()(在异步线程中)读取数据包的其余部分?还是有别的办法?编辑:我认为JonSkeet的链接有解决方案,但该代码有一点速度障碍。我使用的代码是:publicclassStateObject{publicSocketworkSocket=null;publicconstintBUFFER_SIZE=1024;publicbyte[]buffer=newbyte[BUFFER_S

c# - 通过 tcp 或套接字发送类型化对象

我在为我在Xna中制作的一个非常简单的游戏创建网络接口(interface)时遇到了麻烦。我只需要通过TCP客户端/套接字发送对象。前任:我有一个名为“播放器”的类。在每个Player中,都有一个名为“Info”的字段,类型为“PlayerInfo”。在客户端/服务器中,我需要将每个玩家的信息发送给每个客户端,除了发送它的客户端(显然)。这是一个简单的例子,但我需要用大约5到10个对象来做这件事,再加上发送玩家更新(位置、Action……)有没有一种简单的方法可以用TCP/Sock做到这一点?注意:我将我在C#和编程方面的知识评为6/10,因此如果您有解决方案,则无需解释所有内容(例如

c# - 如何将 PFX 证书文件应用于 SslStream 套接字监听器?

我有一个多线程套接字监听器。它监听一个端口。它从HTTP网站接收数据并根据他们的请求发送响应。效果很好。现在我想对HTTPS网站做同样的事情。所以我将其更改为能够通过SslStream而不是socket进行读写。网站所有者给了我一个pfx文件和一个密码。我将其放入本地证书商店的受信任证书列表中。已成功从商店中检索到认证文件。但是在调用AuthenticateAsServer方法后,我的处理程序套接字似乎是空的。所以我在ReceiveCallBack方法中看不到任何数据。如何将pfx证书应用到我的SslStream套接字?这是我的代码:usingSystem;usingSystem.Ne

c# - 网络传输暂停

我用C#创建了一个服务器和一个传输文件的客户端。但是在传输时它会暂停几秒钟然后继续。我已经在YouTube上上传了一段视频来演示:http://www.youtube.com/watch?v=GGRKRW6ihLo如您所见,它有时会暂停然后继续。接收者:using(varwriter=newStreamWriter(Path.Combine(_localPath,file.FileName))){varbuffer=newbyte[_bufferSize];while(file.Transferred发件人:using(varreader=newStreamReader(file.Fi