• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

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()函数,给点建议或者想法?
解决立即给分.
...全文
163 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
回复
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2004-11-04 04:50
社区公告

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