重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
我不给你代码了,我才编了SOCKET的,告诉你原理吧(我的编程经验而已)
成都创新互联公司-专业网站定制、快速模板网站建设、高性价比丹江口网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式丹江口网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖丹江口地区。费用合理售后完善,10余年实体公司更值得信赖。
SOCKET传输文件和接受是有大小限制的,默认是81**来则也就是8K多,你可以改小,但改大我没试过,然后你必须把文件分成若干份,然后传过去,然后在接收端组合起来,同时接收端的接受大小要和发送大小统一。
至于你说的文件名,文件名不属于文件数据中的一部分,它不参与数据传输的,你只能在接收端重新改名字。
同时为什么要用上面的方法传呢,因为VB.NET中的SOCKET有很多问题,我就为此烦过,因为要丢包(理论上TCP不存在),或者粘包,或者断包,也就是你在接收端获取文件时数据是要出错的,比如你定长3000B,结果接收端可能先收到2000B,当接受端接受后,处理会出错的。
所以SOCKET的标准发送方法是建立定长的结构体(结构体必须定义为可序列化结构体),最好结构体里面至少包含有 1,文件名,2,本包序号,3,本包数据,比如每个包大小3040B,文件名占20,序号占20,数据占3000,然后发送出去,接收端每次固定接受3040B,如果接受到的包没有这么大(比如收到2000),那么继续接受(1040),直到达到3040后组合成一个包,在把包分解成结构体,相同的文件名为一个文件,再按照序号按次组合其中的数据,这就完成了传输。这样的方法还可以同时传送多个文件,因为结构体里面包含了文件名和序列号,不会错乱,如果是大文件,请不要接收完毕后(最后一个包的序号可以为-1,或者包里包含总长度,检查到序号为-1时表示完毕,或者达到总长度后表示完毕)再组合,因为这样会浪费电脑内存,最好的方法是一边接受数据,一边写入到文件中(收到第一个包时就建立文件,以后每个包的数据都往里面写)。
回答你的问题:
1、经过上面的传输后,文件是不变化的,MD5检查都是正常的,不用担心文件大小有变化(如果有变化,那就是代码没编对)
2,、文件名问题,我前面提到了,文件名是不参与传输的,它不属于数据中的一部分,比如同一个文件,不管你怎么改名字MD5是不变的。你只能通过把文件名想办法传给对方(比如我上面说的结构体方法),让对方写入文件时使用。
3,代码:
还是给你找找吧,等等
不行,我的都很大,很长,你还是在网上找吧,有很多例子,我也是网上学的。
1.绑定的IP是服务器的IP地址,服务器是固定的,客户端连接的是一个已知的服务器端。
2.客户端的话,连接到服务器时,服务器accept后,就可以获得客户端的连接信息,包括IP地址和端口。
我是学C的,在C语言中,socket-bind-listen-accept-....,在accept函数中有选项,如下caddr结构体中就存有accept后客户端的IP地址 连接端口和传输方式等信息,clientsock[1]则为accept新的描述符,如你程序中soc2一样 。
clientsock[1] = accept(sfd,(struct sockaddr*)caddr,len);
VB中应该也有类时的函数,你网上好好找一下,或者看看相关书籍.
麻烦给我发下vb2010下Socket类的使用方法,最好是有代码。就是怎样实现同一台电脑上两个程序的通讯,1窗体有按钮,文本框,2窗体有文本框,当单机1窗体的按钮时该窗体文本框的内容在2窗体的文本框中显示。。。十万火急啊。 邮箱523484850@qq.com
Socket类连接后 可以通过类中的 RemoteEndPoint 来获取远程IP和端口信息.
要注意的是.需要将它强制转化为 IPEndPoint类型 然后通过 IPEndPoint.Address以及IPEndPoint.Port来获取对应的IP及端口
例:
Dim REV_SCK As New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
'这里创建一个UDP Socket连接的实例 TCP也是一样的
'省略SOCKET连接的代码 当SOCKET连接成功后 可以用下面的语句获取远程信息
Dim IP as string ,Port as integer
'定义IP和Port变量 用来保存地址及端口
IP = IPAddress.Parse(CType(REV_SCK.RemoteEndPoint, IPEndPoint).Address.ToString())
Port = IPAddress.Parse(CType(REV_SCK.RemoteEndPoint, IPEndPoint).Port)