小编use*_*551的帖子

C#套接字,接收大文件

我现在正在使用asyn套接字.我有一个回调函数'onDataReceived',只要我收到任何数据就会触发它.

首先我一次得到一个char,所以我将socketPacket数据缓冲区更改为一个大数组.现在,当我不断接收数据,我得到这一切在一次,但是当我试图发送一个更大的文件,一旦它超过了数组的大小这是行不通的.

我的问题是这个.我有一个多线程套接字服务器.如何在收到所有数据时确定?例如,我需要发送一个图像,我将图像编码为base64并构造一个命令"BASE64IMAGE",然后服务器读取字符串,直到它达到END_OF_DATA?有更好的方法吗?谢谢!

c# sockets

0
推荐指数
1
解决办法
881
查看次数

HttpWebRequest无效的contentlength

我需要获取内容长度,以告诉我的应用程序缓冲区结束的位置.问题是httpwebresponse.ContentLength返回-1,即使在响应中显示Content-Length标头.

然后我虽然我要读实际的标题来找出长度.我正在测试的页面返回的Content-Length是1646.一个HTTP嗅探器声称我收到了1900个字节,所以我假设差异是标题长度.然后我从响应中复制了整个身体并将其粘贴到在线strlen网站上,体型实际上是1850!

这怎么可能?为什么响应返回无效的内容长度,为什么httpwebrequest.ContentLength返回-1?如何在收到响应之前计算实际响应长度?

编辑:这是我用来获得响应的代码:

                  using (System.IO.Stream responseStream = hwresponse.GetResponseStream())
                  {
                      using (MemoryStream memoryStream = new MemoryStream())
                      {
                          int count = 0;
                          do
                          {
                              count = responseStream.Read(buffer, 0, buffer.Length);
                              TCP_R.SendBytes(buffer);

                          } while (count != 0);

                      }
                  }

                  byte[] PACKET_END_IDENTIFIER = { 0x8, 0x01, 0x8, 0x1, 0x8 };
                  TCP_R.SendBytes(PACKET_END_IDENTIFIER);
                  TCP_R.Close();
Run Code Online (Sandbox Code Playgroud)

我有一个代理服务器应用程序接收请求,将其发送到另一个应用程序(我的客户端)客户端执行请求并使用TCP_R类返回结果.当服务器从客户端获得响应时,它会将响应返回给浏览器.

每次我做一个请求,我得到所有的数据+额外的垃圾,这是一个例子:

<tag1><tag2><tag3> ag3> 
Run Code Online (Sandbox Code Playgroud)

ag3>是垃圾数据,它就像缓冲区的结尾被切断并再次添加.它显示客户端响应有效响应,垃圾数据添加onDataRecieve事件..任何提示?谢谢!

c# httpwebrequest content-length

0
推荐指数
1
解决办法
4387
查看次数

标签 统计

c# ×2

content-length ×1

httpwebrequest ×1

sockets ×1