ICANN认证国际域名顶级注册机构
网站建设,域名注册,空间租用,软件销售,广告设计 域名注册,空间租用, 网站建设,东莞网页设计,域名注册,网站推广,网站开发,网页设计 网站推广,,百度推广,新浪推广,雅虎推广,网易推广 标志设计,画册设计,包装设计,VI策划,企业形象顾问 连邦软件加盟店,提供销遥行,管家婆,速达,用友ERP,诺顿等软件报价及销售 建站必读 腾达网络,上网帮助中心, 腾达为东莞等地,提供网站建设,网站推广,广告设计,软件销售等优质服务!
建站必读


 
 
当前位置:首页 -> 建站必读 -> .NET技术
用Socket实现点对点的文件传输
System.Sockes命名空间了实现 Berkeley 套接字接口。通过这个类,我们可以实现网络计算机之间的消息传输和发送.而在我下面要讨论的这个议题里,我们将讨论的是用套节子实现文件的传输.这种方法有别于FTP协议实现的的文件传输方法,利用ftp的方法需要一个专门的服务器和客户端,无疑于我们要实现的点对点的文件传输太为复杂了一些。在这里,我们实现一个轻量级的方法来实现点对点的文件传输,这样就达到了intenet上任何两个计算机的文件共享。



在两台计算机传输文件之前,必需得先有一台计算机建立套节子连接并绑定一个固定得端口,并在这个端口侦听另外一台计算机的连接请求。



socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);

socket.Blocking = true ;

IPEndPoint computernode1 = new IPEndPoint(serverIpadress, 8080);



socket.Bind(computernode1);



socket.Listen(-1);



当有其他的计算机发出连接请求的时候,被请求的计算机将对每一个连接请求分配一个线程,用于处理文件传输和其他服务。



while ( true )



{



clientsock = socket.Accept();



if ( clientsock.Connected )



{



Thread tc = new Thread(new ThreadStart(listenclient));



tc.Start();



}



}







下面的代码展示了listenclient方法是如何处理另外一台计算机发送过来的请求。首先并对发送过来的请求字符串作出判断,看看是何种请求,然后决定相应的处理方法。



void listenclient()

{

Socket sock = clientsock ;

try

{

while ( sock != null )

{

byte[] recs = new byte[32767];

int rcount = sock.Receive(recs,recs.Length,0) ;

string message = System.Text.Encoding.ASCII.GetString(recs) ;

//对message作出处理,解析处请求字符和参数存储在cmdList 中

execmd=cmdList[0];

sender = null ;

sender = new Byte[32767];



string parm1 = "";

//目录列举

if ( execmd == "LISTING" )

{

ListFiles(message);

continue ;

}

//文件传输

if ( execmd == "GETOK" )

{

cmd = "BEGINSEND " + filepath + " " + filesize ;

sender = new Byte[1024];

sender = Encoding.ASCII.GetBytes(cmd);

sock.Send(sender, sender.Length , 0 );

//转到文件下载处理

DownloadingFile(sock);

continue ;

}

}

}

catch(Exception Se)

{

string s = Se.Message;

Console.WriteLine(s);

}

}



至此,基本的工作已经完成了,下面我们看看如何处理文件传输的。

while(rdby < total && nfs.CanWrite)

{

//从要传输的文件读取指定长度的数据

len =fin.Read(buffed,0,buffed.Length) ;

//将读取的数据发送到对应的计算机

nfs.Write(buffed, 0,len);

//增加已经发送的长度

rdby=rdby+len ;

}

从上面的代码可以看出是完成文件转换成FileStream 流,然后通过NetworkStream绑定对应的套节子,最后调用他的write方法发送到对应的计算机。

我们再看看接受端是如何接受传输过来的流,并且转换成文件的:

NetworkStream nfs = new NetworkStream(sock) ;

try

{

//一直循环直到指定的文件长度

while(rby < size)

{

byte[] buffer = new byte[1024] ;

//读取发送过来的文件流

int i = nfs.Read(buffer,0,buffer.Length) ;

fout.Write(buffer,0,(int)i) ;

rby=rby+i ;

}

fout.Close() ;



从上面可以看出接受与发送恰好是互为相反的过程,非常简单。

至此,单方向的文件传输就完成了,只需要在每个对等的节点上同时实现上面的发送和接受的处理代码就可以做到互相传输文件了。


 
 
本站关键词:
|东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|做网站|设计网站|东莞虚拟主机|东莞asp空间||东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|做网站|设计网站|东莞虚拟主机|东莞asp空间||东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|做网站|设计网站|东莞虚拟主机|东莞asp空间||东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|做网站|设计网站|东莞虚拟主机|东莞asp空间||东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|做网站|设计网站|东莞虚拟主机|东莞asp空间||东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|做网站|设计网站|东莞虚拟主机|东莞asp空间||东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|做网站|设计网站|东莞虚拟主机|东莞asp空间||东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|做网站|设计网站|东莞虚拟主机|东莞asp空间||东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|做网站|设计网站|东莞虚拟主机|东莞asp空间||东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|做网站|设计网站|东莞虚拟主机|东莞asp空间||东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|做网站|设计网站|东莞虚拟主机|东莞asp空间||东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|做网站|设计网站|东莞虚拟主机|东莞asp空间||东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|做网站|设计网站|东莞虚拟主机|东莞asp空间|
域名注册 | 虚拟主机 | 网站建设 | 网站推广 | 广告设计 | 帮助中心 | 软件中心 | 关于腾达
东莞市腾达信息工程有限公司      本站网络实名: 东莞网站建设
地址:东莞市新城市中心区第一国际B座610   邮编:523007
电话:0769-22026071 22026072 传真:0769-22026076 24小时服务热线:13712032014
© 2002~2005 腾达网络   版权所有