100分求解c#的sockets发送大文本的思想

stone_lee 2004-11-04 04:50:12
片断程序如下:
byte[] b = new byte[buffer_size];
string[] getArray = null;
try
{
while(receive > 0)
{
receive = socketR.ReceiveFrom(b,ref ep);
getData = System.Text.Encoding.Default.GetString(b);//获取发送过来的消息
getArray = cutStr(getData,"★");截取消息获取消息类型
if (getArray.Length > 0)
{
getType = getArray[0];获得消息类型
}
switch (getType)
{
case "A@ECHOPASS":
send(sendData) //却任接收文件
receFile(path);//建立连接用sockets流获取文件
break;
default:
break;
}
发送过来头消息,截取消息,得到消息类型,如A@ECHOSERVER为接收文件请求,收到后发送接收文件确认消息,另一端收到确认消息后,建立连接,将文件流转为网络流发送给对方.循环,可以收到文件.
现在有下面的问题,第2次判断由于流中不包含判断条件A@ECHOPASS,所以没有继续执行receFile()函数,给点建议或者想法?
解决立即给分.
...全文
197 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
stone_lee 2004-11-05
  • 打赏
  • 举报
回复
还有没
Alden 2004-11-04
  • 打赏
  • 举报
回复
不会,帮你顶一下
小蕊_claudia 2004-11-04
  • 打赏
  • 举报
回复
http://www.cnblogs.com/elevenWolf/archive/2004/08/13/33190.aspx
stone_lee 2004-11-04
  • 打赏
  • 举报
回复
上面的回答与问题不太相关.多给点建议的点子。
xiaohutushen 2004-11-04
  • 打赏
  • 举报
回复
供参考:
解决的方法是利用隐含的HttpWorkerRequest,用它的GetPreloadedEntityBody 和
ReadEntityBody方法从IIS为ASP.NET建立的pipe里分块读取数据
IServiceProvider provider = (IServiceProvider)
HttpContext.Current;
HttpWorkerRequest wr = (HttpWorkerRequest)
provider.GetService(typeof(HttpWorkerRequest));
byte[] bs = wr.GetPreloadedEntityBody();
....
if (!wr.IsEntireEntityBodyIsPreloaded())
{
int n = 1024;
byte[] bs2 = new byte[n];
while (wr.ReadEntityBody(bs2,n) >0)
{
.....
}
}
Chris Hynes为我们提供了这样的一个方案(用HttpModule),该方案除了允许你上传大文件外,还能实时显示上传进度:
jinxf 2004-11-04
  • 打赏
  • 举报
回复
up~
stone_lee 2004-11-04
  • 打赏
  • 举报
回复
继续。。。。。。
xiaoslong 2004-11-04
  • 打赏
  • 举报
回复
完全同意chsfly(一蓑烟雨任平生)的建议
chsfly 2004-11-04
  • 打赏
  • 举报
回复
建议:
1.发确认信息加上数据包的大小和数据包的个数.
2.后继的数据包首字节进行编号发送.
3.接收后看编号是否是确认信息当中的编号如是接收.
stone_lee 2004-11-04
  • 打赏
  • 举报
回复
多谢canoe_eyes
canoe_eyes 2004-11-04
  • 打赏
  • 举报
回复
up

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧