自己写了一个异步传输的例子,可以传输字符串,但不能传输文件,提示这句this.Invoke(OnRevice, new object[] { buffer }); 发生错误 Illegal characters in path. 有没有人帮忙看一下是哪里出现错误了呢?要怎样修改异步传输文件类呢? 之前贴了几个类似的帖子都没人回答,伤心中跪求高手。。
发送端: FileStream file = new FileStream(@"d:\d.zip", FileMode.Open, FileAccess.Read);
int ir = 0;
while ((ir = file.Read(buffer,0,buffer.Length)) > 0)
{
ClientSocket.Send(buffer);
}接收端:
public delegate void OnRevicesString(byte[] by); OnRevicesString OnRevice; private Socket socket; private Socket ClientSocket; private IPEndPoint ipEndPoint; private byte[] buffer= new byte[1024]; void StartListen()
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ipEndPoint = new IPEndPoint(IPAddress.Parse("192.168.203.128"), 8090); socket.Connect(ipEndPoint); socket.BeginReceive(buffer, 0, buffer.Length, 0, new AsyncCallback(AcceptRec), socket);
} private void button1_Click(object sender, EventArgs e)
{
StartListen();
} void AcceptRec(IAsyncResult ia)
{
ClientSocket = (Socket)ia.AsyncState;
// int len = ClientSocket.EndReceive(ia);
OnRevice = new OnRevicesString(Mess);
this.Invoke(OnRevice, new object[] { buffer });
socket.BeginReceive(buffer, 0, buffer.Length, 0, new AsyncCallback(AcceptRec), socket);
} void Mess(byte[] by)
{
byte[] mb = by;
FileStream file = new FileStream("D:\testD.zip", FileMode.CreateNew, FileAccess.Write);
file.Write(mb, 0, mb.Length);
file.Close();
}
发送端: FileStream file = new FileStream(@"d:\d.zip", FileMode.Open, FileAccess.Read);
int ir = 0;
while ((ir = file.Read(buffer,0,buffer.Length)) > 0)
{
ClientSocket.Send(buffer);
}接收端:
public delegate void OnRevicesString(byte[] by); OnRevicesString OnRevice; private Socket socket; private Socket ClientSocket; private IPEndPoint ipEndPoint; private byte[] buffer= new byte[1024]; void StartListen()
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ipEndPoint = new IPEndPoint(IPAddress.Parse("192.168.203.128"), 8090); socket.Connect(ipEndPoint); socket.BeginReceive(buffer, 0, buffer.Length, 0, new AsyncCallback(AcceptRec), socket);
} private void button1_Click(object sender, EventArgs e)
{
StartListen();
} void AcceptRec(IAsyncResult ia)
{
ClientSocket = (Socket)ia.AsyncState;
// int len = ClientSocket.EndReceive(ia);
OnRevice = new OnRevicesString(Mess);
this.Invoke(OnRevice, new object[] { buffer });
socket.BeginReceive(buffer, 0, buffer.Length, 0, new AsyncCallback(AcceptRec), socket);
} void Mess(byte[] by)
{
byte[] mb = by;
FileStream file = new FileStream("D:\testD.zip", FileMode.CreateNew, FileAccess.Write);
file.Write(mb, 0, mb.Length);
file.Close();
}
去看去学
但是尽管如此,所谓异步就是根本不等待执行完(甚至根本没有开始)就执行下一个动作了,那么就会出现多个数据接收动作同时并行去操作这个文件,那么接下来你的程序也会有一大堆异常的!
如果不注释掉这句程序就弹出一个错误了。我按照你的方法把改了路劲,运行后果然如你所说,有异常。。这个testD.zip始终只有1K的大小,呵呵,请问要怎样改进呢?
改成BeginInvoke异步能写入吗?