Tag: stream

TCP客户端连接

我有一个应用程序,我为我的应用程序分发在整个公司,通过我们的Windows 2003服务器(运行IIS 6.0)向我发送数据。 小文本消息通过,但包含更多数据(大约20 KB)的更大消息无法通过。 我将字节缓冲区设置为TCP客户端的缓冲区大小。 我注意到我的数据正在服务器上收到; 但是,它只通过一次接收例程循环,我的大文件总是与缓冲区大小完全相同,或者我们服务器上的大小为8 KB。 换句话说,我的代码只在服务器关闭套接字连接之前通过一个循环。 考虑到填充整个缓冲区可能存在问题,我尝试将读取/写入限制为仅1 KB,但这只会导致我们的服务器在关闭连接之前收到1 KB后关闭套接字。 我将服务器的错误消息发送回客户端,以便我可以查看它。 我从客户端收到的具体错误消息是: “无法将数据写入传输连接:已建立的连接已被主机中的软件中止。” 我更新了我的服务器应用程序,以便底层TCP Socket将使用“keep alives”与此行: client.Client.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.KeepAlive, true); 现在,每当我尝试发送消息时,客户端都会收到错误: “无法将数据写入传输连接:远程主机强行关闭现有连接。” 我们的网络管理员告诉我他的内部服务器上没有防火墙或任何端口被阻止。 谷歌搜索错误,我发现post暗示人们试图telnet到服务器。 我用他们的方向telnet到服务器,但我不知道如何做出响应: C:> telnet欢迎使用Microsoft Telnet客户端 逃脱角色是’CTRL +]’ Microsoft Telnet> open cpapp 500正在连接到cpapp … 这就是我得到的。 我从来没有得到错误,微软的Telnet屏幕最终会改为“按任意键继续……” – 我想它超时了,但我的代码能以某种方式连接。 我已尝试在代码中通过Telnet尝试其他端口,包括25,80和8080.Telnet启动端口25,但我的应用程序似乎读取第一个循环,无论我告诉它运行什么端口。 这是我在客户端上运行的代码: int sendUsingTcp(string location) { string result = string.Empty; try { using […]

C#:实现NetworkStream.Peek?

目前,C#中没有NetworkStream.Peek方法。 实现像NetworkStream.ReadByte这样的函数的最佳方法是什么,除了返回的byte实际上没有从Stream删除?

使用TcpClient和Reactive Extensions从Stream读取连续字节流

请考虑以下代码: internal class Program { private static void Main(string[] args) { var client = new TcpClient(); client.ConnectAsync(“localhost”, 7105).Wait(); var stream = client.GetStream(); var observable = stream.ReadDataObservable().Repeat(); var s = from d in observable.Buffer(4) let headerLength = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(d.ToArray(), 2)) let b = observable.Take(headerLength) select b.ToEnumerable().ToArray(); s.Subscribe(a => Console.WriteLine(“{0}”, a)); Console.ReadLine(); } } public static class Extensions […]

使用临时文件流进行处理

假设我想定义一个使用Path.GetTempFileName()方法创建临时文件的TempFileStream类。 当不再需要TempFileStream的对象时,必须删除临时文件,例如关闭或处置: class TempFileStream: FileStream { string m_TempFileName = Path.GetTempFileName(); public TempFileStream(FileMode fileMode): base(m_TempFileName,fileMode) {} /// … public ovverride Dispose(bool disposing) { /// ??? } } 我该如何简单安全地实现这一点?

.NET流,在对象之间传递流,最佳实践(C#)

我现在正在用c#编写一个小玩具汇编程序(通过计算系统书的元素 。顺便说一句,这本书非常好。) 汇编程序采用输入文件路径并删除垃圾(注释等)行。 然后将该文件传递给解析器,最后传递给另一个创建二进制代码的模块。 这不是太复杂,但是每当一个对象完成输入文件的处理时,我不想写文件系统的临时文件。 我想将流传递到下一个对象。 我原本以为每个涉及解析/垃圾删除的类都会实现IDisposable,但我认为这意味着我无法在下一个对象上传递流进行处理(流将被关闭,除非我将它全部保存在一个使用语句中? )。 我想我在这里遗漏了一些东西,是否有一种简单的方法可以干净地在对象之间传递流,或者我需要一种不同的方法吗? 在此先感谢您的帮助!

将文件从Flex上传到WCF REST Stream问题(如何在REST WS中解码多部分表单post)

该系统是与WCF REST Web服务通信的Flex应用程序。 我正在尝试将文件从Flex应用程序上传到服务器并遇到一些问题,我希望有人能够提供帮助。 我在Flex应用程序中使用FileReference来浏览和上传此处定义的文件: http://blog.flexexamples.com/2007/09/21/uploading-files-in-flex-using-the-filereference-class/ 然后我在WCF REST Web服务(使用WCF 4 REST服务的项目类型)中接收文件作为Stream(在调试器中显示为System.ServiceModel.Dispatcher.StreamFormatter.MessageBodyStream) [WebInvoke(Method = “POST”, UriTemplate = “_test/upload”)] public void UploadImage(Stream data) { // TODO: just hardcode filename for now var filepath = HttpContext.Current.Server.MapPath(@”~\_test\testfile.txt”); using (Stream file = File.OpenWrite(filepath)) { CopyStream(data, file); } } private static void CopyStream(Stream input, Stream output) { var buffer = new […]

在调用ReadAsStreamAsync时何时或何时调用HttpResponseMessage?

我使用System.Net.Http.HttpClient进行一些客户端HTTP通信。 我在一个地方得到了所有的HTTP,从其余的代码中抽象出来。 在一个实例中,我希望将响应内容作为流读取,但是流的使用者与HTTP通信发生的位置以及流被打开的情况很好地隔离。 在负责HTTP通信的地方,我正在处理所有的HttpClient内容。 在Assert.IsTrue(stream.CanRead)此unit testing将失败: [TestMethod] public async Task DebugStreamedContent() { Stream stream = null; // in real life the consumer of the stream is far away var client = new HttpClient(); client.BaseAddress = new Uri(“https://www.google.com/”, UriKind.Absolute); using (var request = new HttpRequestMessage(HttpMethod.Get, “/”)) using (var response = await client.SendAsync(request)) { response.EnsureSuccessStatusCode(); //here I […]

在C#中从SQL Server流式传输VARBINARY数据

我正在尝试使用ASP.Net提供存储在数据库中VARBINARY(MAX)字段中的图像数据。 现在,代码填充数据表,然后将字节数组拉出DataRow并将字节数组推送到响应中。 我想知道是否有办法将数据从SQL Server或多或少地流式传输到响应中,而不必编组这些巨大的字节数组(因为图像很大,它们会导致OutOfMemoryExceptions)。 那有一个类/机制吗? 当前代码看起来或多或少像: DataTable table = new DataTable(); SqlDataAdapter adapter = new SqlDataAdapter(commandText, connectionString); adapter.Fill(table); DataRow row = table.Rows[0]; byte[] imageData = row[0] as byte[]; if(imageData != null) { Response.Clear(); Response.BinaryWrite(imageData); Response.End(); } 在此先感谢 – 任何帮助表示赞赏。

将PDF传输到浏览器?

有谁能请告诉我如何将pdf流式传输到新的标签浏览器? 我只是在内存上有pdf流,当我点击链接在新标签页或窗口浏览器中显示PDF时我想要。 我怎么能这样做? 谢谢!!! 我有这个链接: 在我的代码背后,我在onload事件上有这个: Stream pdf= getPdf if (pdf != null) { SetLinkPDF(pdf); } private void SetLinkPDF(IFile pdf) { hrefPdf.href = “MyPDF to the Browser” PdfName.Text = pdf.PdfName; } 不过,我必须处理流pdf(IFile包含PDF的名称,流,元数据等) 我可以做些什么来处理这个以及当我点击在新浏览器中显示流时? 我还有另一个问题,就是OnClientClick =“aspnetForm.target =’_ blank’;” timbck2建议我。 我必须在新窗口中打开文件(图像或pdf),我该怎么办? 不工作这个。 谢谢! Timbbck2我的asp代码是: 谢谢!!!

HttpWebResponse:关闭流

我从HttpWebRequest (使用修改后的版本Jeff Richter的CCR包装器 )获得响应,然后检查一些标头以决定是否继续下载。 有时我可能不想继续,所以我因此发出response.Close和request.Abort 。 是否有必要发出GetResponseStream然后关闭流,或者当调用response.Close时这是隐式的吗? 发出GetResponse后, 文档说明 : 您必须调用Close方法来关闭流并释放连接。 如果不这样做可能会导致您的应用程序用完连接。 那么这是否意味着一旦我们得到响应,那么获取流并关闭它是必须的吗? 我们看到一些相当奇怪的问题,其中挂起的下载最终会淹没系统。 这似乎是资源泄漏的最强候选者,但想知道是否有其他人有这个问题的经验。 旁白:假设它是同一个流,GetResponseStream是否安全两次?