六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

用Socket完成點對點的文件傳輸

[摘要]System.Sockes命名空間了實現 Berkeley 套接字接口。通過這個類,我們可以實現網絡計算機之間的消息傳輸和發送.而在我下面要討論的這個議題里,我們將討論的是用套節子實現文件的傳輸.這...
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() ;

從上面可以看出接受與發送恰好是互為相反的過程,非常簡單。
至此,單方向的文件傳輸就完成了,只需要在每個對等的節點上同時實現上面的發送和接受的處理代碼就可以做到互相傳輸文件了。



主站蜘蛛池模板: 五月激情六月丁香 | 日日摸夜夜添夜夜添成人 | 亚洲欧美网站 | 色噜噜狠狠狠色综合久 | 欧洲一级毛片 | 日韩无套 | 天堂美女 | 青苹果a4yy私人毛片 | 四虎影院永久在线观看 | 日本免费网 | 四虎永久免费在线观看 | 深夜视频在线播放视频在线观看免费观看 | 天天看片日日夜夜 | 亚洲在成人网在线看 | 欧美一级高清视频在线播放 | 青娱乐国产 | 日韩高清在线日韩大片观看网址 | 香蕉视频久久 | 午夜视频在线免费 | 亚洲国产毛片aaaaa无费看 | 亚洲高清一区二区三区四区 | 四虎在线视频免费观看 | 欧美中文在线观看 | 日本高清免费一本视频无需下载 | 天堂网www在线资源链接 | 三级在线免费观看 | 欧美亚洲综合另类 | 午夜网页| 天天干夜夜爽天天操夜夜爽视频 | 中文国产成人精品久久一 | 天天干天天要 | 日韩免费毛片全部不收费 | 日本一片免费观看高清完整 | 亚洲国产高清精品线久久 | 青春草视频| 欧美太黄太色视频在线观看 | 天天做人人爱夜夜爽2020 | 日韩精品亚洲一级在线观看 | 四虎影院在线看 | 日本大片在线播放在线 | 主播国产|