日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

socket传文件

發布時間:2025/5/22 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 socket传文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

private string path = "F:\\SmartMovie.EXE";??? //要發送的文件

????????????????????? private Socket s;?????????????????????????????

???????? private void listen()
??????? {
??????????? string ip = "127.0.0.1";?? //遠程IP 這里定義為自己的機器
??????????? IPAddress[] ih = Dns.GetHostAddresses(ip);?????? //獲得IP列表
??????????? IPAddress newip = ih[0];????? //獲取IP地址
??????????? int port = 6789;????????????? //定義端口
??????????? IPEndPoint Conncet = new IPEndPoint(newip, port);???? //構造結點
??????????? s = new Socket(AddressFamily.InterNetwork, SocketType.Stream,? ProtocolType.Tcp);?? //初始化socket?

???? try
??????? {
??????????? s.Connect(Conncet);????? //連接遠程服務器
??????????? if (s.Connected)???????? //如果連接成功 s.Connected 則為true 否則為 false
??????????? {

??????????????? Console.WriteLine("連接成功");
??????????????? Thread t = new Thread(new ThreadStart(set)); //創建進程
??????????????? t.Start();???????????????????????????? //開始進程
??????????????? Console.WriteLine("發送完畢")??????

??????????? }

?????????????? }
??????????????? catch(NullReferenceException e)
??????????? {

????????????? Console.WriteLine("{0}",e);

??????????? }

??????????? private void set()?????????????????????? //創建set函數
??????? {
??????????? Console.WriteLine("開始發送數據");
??????????? byte[] b = new byte[10000000];??????????? //創建文件緩沖區,這里可以認為文件的最大值
??????????? FileStream file = File.Open(path, FileMode.Open,FileAccess.Read);?? //創建文件流
??????????? int start = 0;
??????????? int end = (int)file.Length;?????????????? //獲取文件長度文件傳送如果有需要超過int的范圍估計就要改寫FileStream類了

try
????????? {
??????????? while (end != 0)
??????????? {
??????????????? int count = file.Read(b, start, end);????? //把數據寫進流
??????????????? start += count;
??????????????? end -= count;
??????????? }
??????????? while (start != 0)
??????????? {
??????????????? int n = s.Send(b, end, start, SocketFlags.None);? //用Socket的Send方法發送流
??????????????? end += n;
??????????????? start -= n;
??????????? }
??????????? file.Close();???? //關閉文件流
??????????? s.Close();??????? //關閉Socket
????????? }?
????? catch (NullReferenceException e)
??????????? {
??????????????? Console.WriteLine("{0}", e);
??????????? }????????????
??????? }???

這樣文件發送的模型就實現了

??? 接下去實現文件的接收,首先要確定對方發送文件的長度,其實上面的那段還要加入發送文件長度的功能,實現很簡單,就是發送int變量end ,然后要求接收代碼返回一個Boolean確定是否發送,這里為了更簡明的說清楚原理并沒有實現

???????????? private void get()
??????? {
??????????? string path = "G:\\da.exe";? //接收的文件
??????????? FileStream file = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); //寫入文件流
??????????? TcpListener listen = new TcpListener(6789);? //監聽端口
??????????? Socket s1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);? //定義Socket并初始化
??????????? try
??????????? {
???????????? listen.Start();??????? //開始監聽
??????????? s1 = listen.AcceptSocket();??????????? //獲取Socket連接
??????????? byte[] data = new byte[10000000];????? //定義緩沖區
??????????? int longer = data.Length;??????????????
??????????? int start = 0;????????????????
??????????? int mid = 0;
??????????? if (s1.Connected)???????????? //確定連接
??????????? {
??????????????? Console.WriteLine("連接成功");
??????????????? int count = s1.Receive(data, start, longer, SocketFlags.None);? //把接收到的byte存入緩沖區
??????????????? mid += count;
??????????????? longer -= mid;
??????????????? while (count != 0)
??????????????? {
??????????????????? count = s1.Receive(data, mid, longer, SocketFlags.None);
??????????????????? mid += count;
??????????????????? longer -= mid;
??????????????? }
??????????????? file.Write(data, 0, 1214134); //寫入文件,1214134為文件大小,可以用socket發送獲得,代碼前面已經說明。
??????????????? s1.Close();
??????????????? file.Close();
??????????? }
??????????? }
??????????????? catch(NullReferenceException e)
??????????? {
??????????????????? Console.WriteLine("{0}",e);
??????????? }
????????? }

?

http://www.cnblogs.com/wsy6634/archive/2008/10/13/1310294.html

轉載于:https://www.cnblogs.com/chinhr/archive/2009/05/06/1450719.html

總結

以上是生活随笔為你收集整理的socket传文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。