日期:2014-05-19  浏览次数:20654 次

询问关于SOKCET异步发送文字和文件问题
【1】发送文字是否可以一个字节一个字节的发?代码如下
  bytes   =   Encoding.Default.GetBytes(Str);
  MyClient.BeginSend(bytes,   0,bytes.Length,   0,   new   AsyncCallback(SendCallback),   MyClient);

如果这么写的话,一次性就将所要发送的文字全部发出去了。但是我想取到要发送的文字的所有字节后,采用异步,一个字节一个字节的发出去。对于上面的代码应该怎么改?(我自己试过一些办法没有成功)

【2】对于发送文件,如何将文件分块发送出去,请给出一些相关代码。谢谢

------解决方案--------------------
bytes = Encoding.Default.GetBytes(Str[0]);

------解决方案--------------------
第一个:
MyClient.BeginSend(bytes, 0,bytes.Length, 0, new AsyncCallback(SendCallback), MyClient);
---------
MyClient.BeginSend(bytes, start,1, 0, new AsyncCallback(SendCallback), MyClient);
发送完后 start++,再循环发送
------解决方案--------------------
bytes = Encoding.Default.GetBytes(Str);

int size=0;
for(int i=0 ; i <bytes.Length ;i=i+8)
{
size=(i*8)
if(bytes.Length-size-8> 0 )
{
size=8
}else
{
size=(size-bytes.Length)
}

if(size> 0){
MyClient.BeginSend(bytes,i,bytes.Length, 0, new AsyncCallback(SendCallback), MyClient);
}
}
------解决方案--------------------
I*8是你每次要发送的字节数 这个可以根据自己的需要该I*16 ,I*32都可以
一个字节一般是8位 你把字符串转换成2进制数据流 byes[] 在来发送撒 所以发送时 最好是按字节单位来截取发送 就算中间出错丢失了 也只会丢失n个字节 不会影响整体数据 如:“欢迎来到CSDN” 发送后第3个数据(来)出错或丢失了 接收转换后:“欢迎*到CSDN”*能是乱码或空格 影响信息的正确性最小。
如果你一次发3个数据 还是“来”字丢失了 得到的数据就是 :“***到CSDN” 因为“欢迎来”是一个发送单位 中间任何一个数据丢失或错误 就不能正确还原原数据。