草庐IT

stream_socket_sendto

全部标签

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# - 取消 Socket.xxxxAsync 调用

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

c# - Stream.ReadAsync 和 Stream.WriteAsync 是否应该在返回之前或操作完成之后同步更改光标位置?

我一直在尝试实现一个支持ReadAsync和WriteAsync的Stream,并考虑到documentation的冗余性,我正在努力了解如何正确执行此操作。具体来说,关于流的光标位置。问了一个类似的问题here和here关于旧的BeginRead函数。该函数的文档似乎表明,在任何挂起的异步操作完成之前,不应再次调用BeginRead。鉴于BeginRead现在已弃用nolongerrecommendedfornewdevelopment并且Stream可能已被显着改变以实现新的Async功能,事情再次不清楚。(编辑:通常这种警告意味着新函数被直接实现,旧函数调用新函数并且仍然存在只是

c# - 将 Stream 转换为 IEnumerable。如果可能当 "keeping laziness"

我收到一个Stream并需要将IEnumerable传递给另一个方法。publicstaticvoidstreamPairSwitchCipher(StreamsomeStream){...someStreamAsIEnumerable=...IEnumerablereturned=anotherMethodWhichWantsAnIEnumerable(someStreamAsIEnumerable);...}一种方法是读取整个Stream,将其转换为字节数组并将其传入,因为Array实现了IEnumerable。但如果我能以这样一种方式传递它,在传递它之前我不必阅读整个Stream

c# - 如何从字符串对象中获取 System.IO.Stream

我有字符串对象。我需要将此数据传递给XYZ类型的另一个对象。但是这个XYZ类型的对象只采用System.IO.Stream。那么如何将字符串数据转换成流,让XYZ类型的对象可以使用这个字符串数据呢? 最佳答案 您必须选择一种文本编码来将字符串转换为字节数组,然后使用MemoryStream调用您的函数。例如:using(System.IO.MemoryStreamms=newSystem.IO.MemoryStream(System.Text.Encoding.UTF16.GetBytes(yourString))){XYZ(ms)

c# - 使用 Socket 或 UdpClient 进行多播有什么功能上的区别吗?

我正在熟悉多播等。使用了2个主要示例:使用Socket和Bind()UDPClient.JoinMulticastNetwork()一个指定LeaveMulticastGroup和另一个bindingandJoiningwithnoLeaveMulticastGroup()Multicasting的2种方式有什么区别,哪个更好用? 最佳答案 区别在于使用UdpClient之间的抽象级别。使用sockets在较低级别上分类和管理您的多播和multicastoption.如果您使用UdpClient,那么您无需担心套接字和多播选项,因为

C# 在系统上获取 Socket.ReceiveBufferSize 和 Socket.SendBufferSize 的最大值

我们的高吞吐量应用程序(~1gbps)受益于较大的ReceiveBufferSize和SendBufferSize。我注意到在我的机器上我可以有100MB的缓冲区大小,没有问题,但在一些客户端和测试机器上,最大值略高于10MB,而且似乎是可变的。是否有任何方法可以查询系统的最大tx/rx缓冲区大小。 最佳答案 实际上对于高性能网络SO_RCVBUF和SO_SNDBUF根据KB181611,选项应设置为0以避免缓冲区复制:IfyouusetheSO_RCVBUFandSO_SNDBUFoptiontosetzeroTCPstackre

c# - 使用 HttpRequestMessage 或 Stream 上传 REST 文件?

为REST客户端上传文件的更好方法是什么?来自WCFWebAPI文档[WebInvoke(UriTemplate="thumbnail",Method="POST")]publicHttpResponseMessageUploadFile(HttpRequestMessagerequest){来自多个论坛帖子:WCFRESTFileuploadwithadditionalparameters[WebGet(UriTemplate="",Method="POST"]publicstringUploadFile(StreamfileContents)我知道,第一种方法允许直接从普通的HTM

c# - 具有 Stream 类型成员的对象的 JSON.NET 序列化?

希望这是一个我忽略的简单修复。我有一个对象传递到事件处理程序中,我想使用JSON.NET序列化该对象,如下所示:publicvoidOnEvent(IEventObjectfoo){//Serializefootostring/diskhere?vardata=JsonConvert.SerializeObject(foo,Formatting.Indented);}foo的一个或多个成员似乎是流。我已经认识到Streams不可序列化,因为它们是对数据而非数据本身的抽象。这是有道理的。我不知道如何序列化这个对象:a)将流转换成数据并序列化b)忽略流并序列化其余成员一个重要的警告是我无权

c# - 在 C# 中将 Stream 转换为 FileStream

使用C#将Stream转换为FileStream的最佳方法是什么。我正在处理的函数有一个包含上传数据的Stream传递给它,我需要能够执行stream.Read()、stream.Seek()方法,这些方法都是FileStream类型的方法。简单的类型转换不起作用,所以我在这里寻求帮助。 最佳答案 Read和Seek是Stream类型的方法,而不仅仅是FileStream。只是不是每个流都支持它们。(我个人更喜欢使用Positionproperty而不是调用Seek,但它们归结为同一件事。)如果您更喜欢将数据保存在内存中而不是将其转