关于异步套接字是否关闭问题 异步javac#服务器文件下载 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 namespace WindowsFormsApplication1{ class DataReadWrite { public TcpClient client; public NetworkStream ns; public byte[] read; public byte[] write; public DataReadWrite(TcpClient client) { this.client = client; ns = client.GetStream(); read = new byte[client.ReceiveBufferSize]; write = new byte[client.SendBufferSize]; } public void InitReadArray() { read = new byte[client.ReceiveBufferSize]; } public void InitWriteArray() { write = new byte[client.SendBufferSize]; } public EndPoint returnIP() { return client.Client.RemoteEndPoint; } }}这是上面出现的DataReadWrite的一个类 发送文件的时候,为什么等到发送完成后,才执行回调函数,而且是连续执行类里这个函数private void SendCallBack(IAsyncResult iar) { DataReadWrite datareadwrite = (DataReadWrite)iar.AsyncState; try { datareadwrite.ns.EndWrite(iar); //datareadwrite.InitWriteArray(); //datareadwrite.ns.Close(); } catch (Exception e) { //MessageBox.Show("出错了"); // listBoxStatus.Invoke(setlistboxcallback,e.ToString()); // comboBox1.Invoke(removecomboboxcallback,datareadwrite); } finally { //datareadwrite.ns.Close(); } } 没工夫看你的代码了。你可以写上几条7、8行c#代码,用.net客户端访问一下,看看能不能重现问题。如果只是java客户端的问题,那么应该去修改客户端程序,而不是服务器。 没工夫看你的代码了。你可以写上几条7、8行c#代码,用.net客户端访问一下,看看能不能重现问题。如果只是java客户端的问题,那么应该去修改客户端程序,而不是服务器。我想知道 异步发送的时候,回调函数什么时候调用呢?还有为什么我服务器套接字一关闭,客户端能正常接收到文件呢?很是不解 c#客户端用的异步,没有问题,java客户端private void receiveFile(DataInputStream in, String localFile,int len1) throws Exception { // 获取socket的输入流并包装成BufferedInputStream try { // Thread.sleep(10000); // BufferedInputStream in = new BufferedInputStream( // socket.getInputStream()); File file = new File(localFile); // 获取与指定本地文件关联的文件输出流 FileOutputStream out = new FileOutputStream(file); byte[] buf = new byte[Buffer]; int len = 0; // 反复读取该文件中的内容,直到读到的长度为-1 while ((len = in.read(buf)) != -1) { out.write(buf, 0, len); // 将读到的数据,按读到的长度写入输出流 } out.flush(); out.close(); in.close(); } catch (Exception e) { System.out.println(e.toString()); } }这段代码接收的 发送完毕(对于tcp来说,基本上就是数据准确而完整滴到达对方的操作系统网卡驱动层)就会回调。如果连通,那么可能在3毫秒以后,也可能在3秒钟以后回调。至于说“我服务器套接字一关闭,客户端能正常接收到文件”,我从来没有听说过这个规则。这只有在“程序编写出错”的情况下才会。 忠告你两句:把你一大堆用 // 注释掉的 c#语句清理干净,这些全都删除掉。把你的所有无关 try...catch...finally代码 删除掉,或者使用条件编译语句使其只有在Release时才出现(在DEBUG时并不出现)。 7楼正解,为什么服务端不传个长度下去呢?客户端根本不知道什么时候文件结束,只好判断-1,-1就是socket断开了。 Quote: 引用 9 楼 guxingfeiyu 的回复:7楼正解,为什么服务端不传个长度下去呢?客户端根本不知道什么时候文件结束,只好判断-1,-1就是socket断开了。[/quote 有道理 发送完毕(对于tcp来说,基本上就是数据准确而完整滴到达对方的操作系统网卡驱动层)就会回调。如果连通,那么可能在3毫秒以后,也可能在3秒钟以后回调。至于说“我服务器套接字一关闭,客户端能正常接收到文件”,我从来没有听说过这个规则。这只有在“程序编写出错”的情况下才会。刚才我做了个测试,发送的时候加了个延迟,回调函数一步步执行了,而不是到最后一起执行 关于C#+jquery 的无刷新操作数据库(添加、删除、查询)? 急求C#算法,车子送货问题 winform 中 ComboBox 的问题~! 大家有好的winform源码下载网址么 菜鸟问datagrid的初级问题,谢谢! 是否是.net的一个bug 求通过web service来传递参数的例子 初学者的问题,急,想来想去想不通 用xsl文件转换出现的编码问题,各位大虾帮一下忙 谁来介绍一个好的登陆界面 窗体之间数据传递。。。。急 WPF 在XAML里面通过一个事件怎么动态创建,只用xaml实现
{
class DataReadWrite
{
public TcpClient client;
public NetworkStream ns;
public byte[] read;
public byte[] write;
public DataReadWrite(TcpClient client)
{
this.client = client;
ns = client.GetStream();
read = new byte[client.ReceiveBufferSize];
write = new byte[client.SendBufferSize];
}
public void InitReadArray()
{
read = new byte[client.ReceiveBufferSize]; }
public void InitWriteArray()
{
write = new byte[client.SendBufferSize];
}
public EndPoint returnIP()
{
return client.Client.RemoteEndPoint;
}
}
}这是上面出现的DataReadWrite的一个类
private void SendCallBack(IAsyncResult iar)
{
DataReadWrite datareadwrite = (DataReadWrite)iar.AsyncState;
try
{
datareadwrite.ns.EndWrite(iar);
//datareadwrite.InitWriteArray();
//datareadwrite.ns.Close();
}
catch (Exception e)
{
//MessageBox.Show("出错了");
// listBoxStatus.Invoke(setlistboxcallback,e.ToString());
// comboBox1.Invoke(removecomboboxcallback,datareadwrite);
}
finally
{ //datareadwrite.ns.Close();
}
}
没工夫看你的代码了。你可以写上几条7、8行c#代码,用.net客户端访问一下,看看能不能重现问题。如果只是java客户端的问题,那么应该去修改客户端程序,而不是服务器。
没工夫看你的代码了。你可以写上几条7、8行c#代码,用.net客户端访问一下,看看能不能重现问题。如果只是java客户端的问题,那么应该去修改客户端程序,而不是服务器。我想知道 异步发送的时候,回调函数什么时候调用呢?还有为什么我服务器套接字一关闭,客户端能正常接收到文件呢?很是不解
private void receiveFile(DataInputStream in, String localFile,int len1)
throws Exception {
// 获取socket的输入流并包装成BufferedInputStream
try { // Thread.sleep(10000);
// BufferedInputStream in = new BufferedInputStream(
// socket.getInputStream()); File file = new File(localFile);
// 获取与指定本地文件关联的文件输出流
FileOutputStream out = new FileOutputStream(file); byte[] buf = new byte[Buffer];
int len = 0;
// 反复读取该文件中的内容,直到读到的长度为-1
while ((len = in.read(buf)) != -1) {
out.write(buf, 0, len); // 将读到的数据,按读到的长度写入输出流 }
out.flush();
out.close();
in.close(); } catch (Exception e) {
System.out.println(e.toString());
}
}
这段代码接收的
发送完毕(对于tcp来说,基本上就是数据准确而完整滴到达对方的操作系统网卡驱动层)就会回调。如果连通,那么可能在3毫秒以后,也可能在3秒钟以后回调。至于说“我服务器套接字一关闭,客户端能正常接收到文件”,我从来没有听说过这个规则。这只有在“程序编写出错”的情况下才会。
把你的所有无关 try...catch...finally代码 删除掉,或者使用条件编译语句使其只有在Release时才出现(在DEBUG时并不出现)。
发送完毕(对于tcp来说,基本上就是数据准确而完整滴到达对方的操作系统网卡驱动层)就会回调。如果连通,那么可能在3毫秒以后,也可能在3秒钟以后回调。至于说“我服务器套接字一关闭,客户端能正常接收到文件”,我从来没有听说过这个规则。这只有在“程序编写出错”的情况下才会。刚才我做了个测试,发送的时候加了个延迟,回调函数一步步执行了,而不是到最后一起执行