sockettcp传输文件
㈠ 如何通过Socket TCP发送并接收一个文件
主要是你通过socket api封装要发送的数据,内部会自动封装成数据流进行传输。
1,什么是Socket
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。
但是,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。
2,Socket通讯的过程
Server端Listen(监听)某个端口是否有连接请求,Client端向Server 端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client 端都可以通过Send,Write等方法与对方通信。
对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
(1) 创建Socket;
(2) 打开连接到Socket的输入/出流;
(3) 按照一定的协议对Socket进行读/写操作;
(4) 关闭Socket.(在实际应用中,并未使用到显示的close,虽然很多文章都推荐如此,不过在我的程序中,可能因为程序本身比较简单,要求不高,所以并未造成什么影响。)
3,创建Socket
创建Socket
java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。这是两个封装得非常好的类,使用很方便。其构造方法如下:
Socket(InetAddress address, int port);
Socket(InetAddress address, int port, boolean stream);
Socket(String host, int prot);
Socket(String host, int prot, boolean stream);
Socket(SocketImpl impl)
Socket(String host, int port, InetAddress localAddr, int localPort)
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
ServerSocket(int port);
ServerSocket(int port, int backlog);
ServerSocket(int port, int backlog, InetAddress bindAddr)
Socket client = new Socket("127.0.01.", 80);
ServerSocket server = new ServerSocket(80);
在创建socket时如果发生错误,将产生IOException,在程序中必须对之作出处理。所以在创建Socket或ServerSocket是必须捕获或抛出例外。
㈡ C#Socket(tcp)异步批量发送文件问题
从ServerB下载文件,分别下载多个文件,
下载结果没有发现错误文件.当开启迅雷下载后没有发现文件错误.
测试文件发送到Server和下载的情况基本差不多,这说明了在网络不好的情况处理发送大数据包似首容易产生错误,但看TCP/IP协议讲解这情况似乎不存在,因为当一个发送数据超过某个值的时候,TCP会划分块进行传输并保证其顺序.但网络不好的情况测试结果接收的数据有错误,但处理的数据大小是正确的,也并没影响整个协议的分解.由于对CP/IP协议、低层和路由处理的不了解,暂没找到具体原因。。。不排除程序存在还没发现的错误,打算给发送的文件数据加上校验再测试一下看情况
㈢ socket TCP协议接收大文件时recv的buffer设置多少合适
tcp是数据流。
如果你第一次的recv不能接收全部数据,可以再次调用recv接收剩余的。
具体点:
你在内发送的时候可以把数据容长度写在前4个字节,或者先发送数据长度过来。
接收的时候就能先知道数据长度,再动态分配内存,接收剩余数据。
这是socket中非常常用的方法。
㈣ 我现在开发一个C#的网络文件传输小软件,用的Socket,tcp。我想问下怎么控制文件传输的速度。
可以的。有几种思路:
1、将文件读入到Filestream中,获得Filestream.Length,然后写一个循环,每次发送1KB,直到发送完成。只要文件大小在内存能承受的范围内,就可以这么做。1KB的发送,即使最烂的网络,只要不断就不会丢包。
2、将文件分批次读入到Filestream中,然后发送,然后再读,再发送....理论上,这样可以发送的文件大小没有限制,目前实测读取和发送的大小必须一致,否则会出错;但是如果有高级的调度算法,应该是没问题的,目前还在研究中...
㈤ socket,tcp,http三者之间的区别和原理
最大区别socket是网络层,http是应用成。。
socket是一个程序组件,它支持TCP,UDP等网络通讯协议,也就是通过socket这个东西你可以和任何互联网或局域网上的计算机通讯。。。TCP,UDP是一个网络层协议,网络层协议不管你发的内容是啥,他只负责把你想法的东西发到对面,发的是啥,他完全不管,因为他不是应用层。。。。
http是应用层协议,在socket的TCP层之上,他是管你发送的内容是什么的,比如你发的是啥,图片还是文字还是视频数据流,发成功了没有,用什么语言发,都做了详细的定义,这样可以保证写软件的人只要按照约定处理数据,就能得到想要的结果。。。
通讯的目的就是应用,所以应用是顶层,否则你发的是坨屎,还是别的什么,无从知道,因为数据都是二进制数据流,必须描述清楚,约定好。。。