大文件上传socket
A. 遇到了在c#中socket如何实现大文件传输
接收端 private void Receive(Socket socket) { NetworkStream ns = new NetworkStream(socket); FileStream fs = new FileStream("c:\\file.txt", FileMode.OpenOrCreate); bool isRead = true; while (isRead) { int count = ns.Read(this._receiveBuf, 0, this._receiveBuf.Length); int datanum = 0; datanum = BitConverter.ToInt32(this._receiveBuf, 0); //从buffer中的前4个字节读出count if (datanum > 0) //确定每次要接受多少字节数 { fs.Write(this._receiveBuf, 4, datanum); } else //如果接受字节数为0 就推出 { isRead = false; } } this.txtFile.Text = "文件传输成功"; fs.Close(); } ---------------------点此发表你的看法>>【已有位网友发表了看法】
B. c语言socket文件传输问题
服务器端(发送文件):首先打开文件【fopen】,用rb方式打开,既可以发送文本文件,也可以发送二进制文件,在无错时初始化套接字socket,即初始化socket库【WSAStartup】,分配socket【socket】,填充服务器的地址,即填充sockaddr_in结构,然后进行绑定【bind】,设置套接字为监听套接字【listen】,接收连接【accept】,至此服务器阻塞,等待客户端的连接。
客户端(接收文件):首先打开文件【fopen】,用wb方式打开,在无错时初始化套接字socket,即初始化socket库【WSAStartup】,分配socket【socket】,填充客户端的地址,即填充sockaddr_in结构,然后进行绑定【bind】,再填充服务器的地址结构,然后调用【connect】进行连接,当连接成功后,第一阶段的工作便结束了。
第二阶段,发送文件。
服务器端:使用循环while,结束条件是(!feof(fp)),fp是文件指针,feof检测当前的文件读取指针是否到达文件尾部,若到达了就返回真,否则返回假。然后在循环内部依次调用【fread】、【send】进行发送。这里有一个问题需要注意,调用fread的时候有两个参数是要每次读多少字节和读多少次,将第一个设置为1,将第二个设置为缓冲区的大小,用一个变量记录实际读到多少字节,即【fread】的返回值,然后将其传递给【send】,就可以实现发送文件了,在发送完成后断开连接【closesocket】,关闭文件【fclose】。
客户端:使用while死循环,调用【recv】接收文件,【fwrite】写入文件,这里也有个和上面类似的问题,就是要将recv的返回值传递给fwrite的第三个参数,即受到了多少字节,就向文件中写多少字节。当recv返回值为0时(连接断开时)退出循环,【closesocket】关闭套接字,调用【fclose】关闭文件。
C. java中,利用socket传送大文件,中途停止问题
thread里面接收数据应该是一个循环把?
那么就给这个循环加一个跳出条件,比如说
private boolean stop=true;
在循环当中增加
if(stop=false){
break;
}
public void setStop(boolean stop)
{
this.stop=stop;
}
然后在需要停的时候调用setStop(false)就可以了
上面纯手打,代码拼写什么的可能有错大概就是这个意思
顺便说一下,thread.interrupt()是用来防止sleep或者wait方法卡死的,不会让线程终结。你要让线程结束还是要手动让程序跳出循环
D. SOCKET 传输大文件应该怎么做
昨天有去做测试,发现,并不是IO的问题造成整体的传输慢!还会代码存在问题
我按照自己3的思路去完成代码,也就是在Server端,我分了两个线程,一个线程用于读取文件,并将读到的buf加入到一个动态链表尾部,另一个线程从此链表头取数据,进行send操作,并且对send的返回值进行校验,如果send的返回值和预期的发送字节数不同,则采用断点重传的方式,继续传输。在Client端口,也是用类似的服务端的机制,维护一个链表,进行读取。
需要说明的是:我维护的这个链表是由深度的,并通过深度来调节两个线程对链表的操作。
E. socket 大文件如何发送
大文件的发送可以把大文件按照二进制byte[]的方式读取 设定一次发送的最大字节数 然后根据最大发送字节数分割成N个等分可能最后一个N的字节数小于最大发送字节数 解决方法是后面补填0就可以了因为发送时间可能会很长 因此用TCP 协议 保证传输的完整性 另外你可以自己编写协议(每次发送之前做一次校验 接收方校验通过就通知发送方发送下一个包就可以了) 做实验的话校验部分就可有可无
F. 请教关于socket传输大文件的思路
这要考虑到文件I/O的效率和传输的速率的问题。
关于I/O效率:buffer的值对I/O效率有很大影响,一般而言buffer缓冲区大小设置为1024 2048 或者4096会得到最佳速率。
关于传输:这个和你的带宽和网络状况有关了,带宽越大,网络状况越好自然传输速度就快。
至于编码,你多线程传输跟单线程传输效率基本上差不多。跟普通文件一样的方式传输就行。
如有不同意见的朋友请指教!谢谢!
G. socket 传送文件
此程序所占篇幅太大,涉及服务器和客户端两个程序。费时间了。
主要思想就那么一点:基本socket编程,再加上文件操作不就行了。服务器端接到客户端发送的内容后,将缓冲区内的东西存到本地文件1.txt然后再将应答存储在2.txt文件中,同时将2.txt的内容发送回客户端。客户端接到后,将收到的东西存到客户端本地的2.txt中后,再向服务器发送应答。这东西的本质不是发送文件,而是接受信息并存储到本地的txt中,希望你理解
H. Socket通信能不能发送文件
当然可以咯,socket是套接字,运行在网络层(IP)以及传输层上,显然是可以传输文件的咯,应用层使用的各种TCP,FTP,UDP服务均可封装在套接字之上,所以显然是可以的咯。