亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C# Socket傳輸大文件

2019-11-17 01:34:10
字體:
來源:轉載
供稿:網友

C# Socket傳輸大文件

1.基礎類TransferFiles,client和server都需要

using System;using System.Collections.Generic;using System.Text;using System.Net;using System.Net.Sockets;using System.Windows.Forms;namespace Server{    public class TransferFiles    {        public static int SendData(Socket s, byte[] data)        {            int total = 0;            int size = data.Length;            int dataleft = size;            int sent;            while (total < size)            {                sent = s.Send(data, total, dataleft, SocketFlags.None);                total += sent;                dataleft -= sent;            }            return total;        }        public static byte[] ReceiveData(Socket s, int size)        {            int total = 0;            int dataleft = size;            byte[] data = new byte[size];            int recv;            while (total < size)            {                recv = s.Receive(data, total, dataleft, SocketFlags.None);                if (recv == 0)                {                    data = null;                    break;                }                total += recv;                dataleft -= recv;            }            return data;        }        public static int SendVarData(Socket s, byte[] data)        {            int total = 0;            int size = data.Length;            int dataleft = size;            int sent;            byte[] datasize = new byte[4];            try            {                datasize = BitConverter.GetBytes(size);                sent = s.Send(datasize);                while (total < size)                {                    sent = s.Send(data, total, dataleft, SocketFlags.None);                    total += sent;                    dataleft -= sent;                }                return total;            }            catch            {                return 3;            }        }        public static byte[] ReceiveVarData(Socket s)        {            int total = 0;            int recv;            byte[] datasize = new byte[4];            recv = s.Receive(datasize, 0, 4, SocketFlags.None);            int size = BitConverter.ToInt32(datasize, 0);            int dataleft = size;            byte[] data = new byte[size];            while (total < size)            {                recv = s.Receive(data, total, dataleft, SocketFlags.None);                if (recv == 0)                {                    data = null;                    break;                }                total += recv;                dataleft -= recv;            }            return data;        }    }}

2.Server端

using System;using System.Collections.Generic;using System.Text;using System.Net;using System.Net.Sockets;using System.Threading;using System.IO;using System.Configuration;namespace Server{    public static class FileServer    {        PRivate static Socket serverSocket;        public static void Init()        {            //服務器ip地址            IPAddress ip = IPAddress.Parse(ConfigurationManager.AppSettings["ListenIP"]);            int myProt = Convert.ToInt32(ConfigurationManager.AppSettings["ListenFilePort"]);            serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            serverSocket.Bind(new IPEndPoint(ip, myProt));  //綁定IP地址:端口            serverSocket.Listen(10);    //設定最多10個排隊連接請求            Console.WriteLine("啟動監聽{0}成功", serverSocket.LocalEndPoint.ToString());            //通過Clientsoket發送數據            Thread myThread = new Thread(ListenClientConnect);            myThread.Start();        }        public static void Exit()        {            serverSocket.Close();            serverSocket = null;        }        private static void ListenClientConnect()        {            while (true)            {                if (serverSocket != null)                {                    try                    {                        Socket clientSocket = serverSocket.Accept();                        Thread receiveThread = new Thread(Create);                        receiveThread.Start(clientSocket);                    }                    catch                    {                        break;                    }                }            }        }        public static void Create(object clientSocket)        {            Socket client = clientSocket as Socket;            //獲得客戶端節點對象            IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;                        //獲得[文件名]               string SendFileName = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));            //檢查是否使用本地媒體庫            if (SocketServer.useLocal)            {                //關閉套接字                   client.Close();                return;            }            //獲得[包的大小]               string bagSize = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));            //獲得[包的總數量]               int bagCount = int.Parse(System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client)));            //獲得[最后一個包的大小]               string bagLast = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));            string fullPath = Path.Combine(Environment.CurrentDirectory,SendFileName);            //創建一個新文件               FileStream MyFileStream = new FileStream(fullPath, FileMode.Create, Fileaccess.Write);            //已發送包的個數               int SendedCount = 0;            while (true)            {                byte[] data = TransferFiles.ReceiveVarData(client);                if (data.Length == 0)                {                    break;                }                else                {                                        SendedCount++;                    //將接收到的數據包寫入到文件流對象                       MyFileStream.Write(data, 0, data.Length);                    //顯示已發送包的個數                     }            }            //關閉文件流               MyFileStream.Close();            //關閉套接字               client.Close();            SocketServer.pForm.ShowMessageBox(SendFileName + "接收完畢!");        }    }}

3.Client端

using System;using System.Collections.Generic;using System.Text;using System.IO;using System.Net;using System.Net.Sockets;using System.Diagnostics;namespace Client{    public static class FileClient    {        public static bool SendFile(string IP,int Port,string fullPath)        {            //創建一個文件對象            FileInfo EzoneFile = new FileInfo(fullPath);            //打開文件流            FileStream EzoneStream = EzoneFile.OpenRead();            //包的大小            int PacketSize = 10000;            //包的數量            int PacketCount = (int)(EzoneStream.Length / ((long)PacketSize));            //最后一個包的大小            int LastDataPacket = (int)(EzoneStream.Length - ((long)(PacketSize * PacketCount)));            //指向遠程服務端節點            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(IP), Port);            //創建套接字            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            //連接到發送端            try            {                client.Connect(ipep);            }            catch            {                Debug.WriteLine("連接服務器失?。?);                return false;            }            //獲得客戶端節點對象            IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;            //發送[文件名]到客戶端            TransferFiles.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(EzoneFile.Name));            //發送[包的大小]到客戶端            TransferFiles.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(PacketSize.ToString()));            //發送[包的總數量]到客戶端            TransferFiles.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(PacketCount.ToString()));            //發送[最后一個包的大小]到客戶端            TransferFiles.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(LastDataPacket.ToString()));            bool isCut = false;            //數據包            byte[] data = new byte[PacketSize];            //開始循環發送數據包            for (int i = 0; i < PacketCount; i++)            {                //從文件流讀取數據并填充數據包                EzoneStream.Read(data, 0, data.Length);                //發送數據包
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一个人看的www久久| 日韩视频―中文字幕| 久久人人爽亚洲精品天堂| 日本成熟性欧美| 2019中文字幕在线| 91国偷自产一区二区三区的观看方式| 日韩免费看的电影电视剧大全| 国产精品第七十二页| 日韩三级影视基地| 4438全国成人免费| 国产精品久久在线观看| 国语自产精品视频在线看一大j8| 26uuu久久噜噜噜噜| 亚洲国产精品成人精品| 国内精品久久久久伊人av| 欧美理论电影在线观看| 亚洲无限av看| 成人在线视频网| 成人av.网址在线网站| 高跟丝袜欧美一区| 亚洲精品日韩在线| 岛国av一区二区在线在线观看| 91免费高清视频| 日韩经典中文字幕在线观看| 成人亚洲激情网| 亚洲欧美日韩国产精品| 高跟丝袜一区二区三区| 7m第一福利500精品视频| 亚洲一区第一页| 国产精品久久久久久久9999| 久久九九有精品国产23| 亚洲精品资源在线| 中文字幕亚洲激情| 欧美大片网站在线观看| 亚洲欧美日韩久久久久久| 亚洲最大av在线| 亚洲老头老太hd| 国产狼人综合免费视频| 在线日韩欧美视频| 国产精品视频在线播放| 在线精品国产欧美| 亚洲精品91美女久久久久久久| 亚洲激情视频在线| 青青久久av北条麻妃黑人| 日韩国产欧美精品一区二区三区| 国产剧情久久久久久| 欧美大片免费观看| 亚洲网站在线播放| 午夜精品一区二区三区在线| 中文字幕日韩精品在线观看| 国产精品小说在线| 成人av.网址在线网站| 欧美日韩国产123| 成人亲热视频网站| 欧美成人在线免费| 亚洲乱码国产乱码精品精| 色偷偷9999www| 国产综合在线观看视频| 91九色视频在线| www.日韩不卡电影av| 国产一区欧美二区三区| 国产成人午夜视频网址| 97久久精品人搡人人玩| 国产欧美日韩亚洲精品| 久久91亚洲人成电影网站| 亚洲视频在线观看| 亚洲国产精品美女| 亚洲色图美腿丝袜| 国产精品黄页免费高清在线观看| 亚洲精品久久久久久久久| 亚洲视频综合网| 亚洲精品一区二区在线| 亚洲一区二区精品| 国产精品第二页| 欧美成人精品在线观看| 亚洲最大激情中文字幕| 97在线视频一区| 欧美成人免费大片| 日韩成人免费视频| 91日韩在线视频| 91系列在线观看| 国产大片精品免费永久看nba| 久久免费视频这里只有精品| 亚洲第一偷拍网| 尤物九九久久国产精品的特点| 欧美日韩亚洲成人| 国内精品久久久久久中文字幕| 国产精品免费久久久| 欧美超级免费视 在线| 亚洲一区二区三区久久| 最近的2019中文字幕免费一页| 国内精品小视频在线观看| 一区二区在线免费视频| 欧美激情亚洲另类| 国产日韩精品在线观看| 精品国产999| 国语对白做受69| 91成人天堂久久成人| 欧美日韩国产成人在线观看| 黑人巨大精品欧美一区免费视频| 久久99国产精品久久久久久久久| 亚洲免费人成在线视频观看| 中文字幕自拍vr一区二区三区| 成人亚洲激情网| 91久久国产精品91久久性色| 久久黄色av网站| 国产精品久久激情| 中文字幕免费国产精品| 亚洲精品视频免费| 日韩国产激情在线| 中文字幕久热精品在线视频| www.亚洲成人| 欧美精品做受xxx性少妇| 久久免费少妇高潮久久精品99| 欧美日韩国产第一页| 欧美精品aaa| 97视频在线免费观看| 三级精品视频久久久久| 欧美在线观看www| 大桥未久av一区二区三区| 日韩福利视频在线观看| 国产亚洲精品美女| 亚洲伊人一本大道中文字幕| 欧美一级大片视频| 亚洲色图日韩av| 久久久久久久国产精品视频| 欧日韩不卡在线视频| 成人亚洲综合色就1024| 亚洲视频欧美视频| 日韩国产欧美精品在线| 另类图片亚洲另类| 久久久噜噜噜久久中文字免| 日韩成人小视频| 欧美日韩爱爱视频| 日韩女在线观看| 久久99热精品| 欧美成人精品激情在线观看| 欧美电影免费观看高清| 成人欧美一区二区三区在线| 亚洲精品久久久久久久久| 欧美性受xxx| 亚洲第一页中文字幕| 欧美成人黄色小视频| 91精品成人久久| 国产香蕉97碰碰久久人人| 欧美性色19p| 欧美性高潮床叫视频| 高清视频欧美一级| 亚洲精品午夜精品| 色中色综合影院手机版在线观看| 亚洲毛片一区二区| 日韩一区二区三区xxxx| 亚洲国产成人精品电影| 国产一区二区三区视频| 九九九久久国产免费| 日日骚久久av| 久久69精品久久久久久国产越南| 九九热这里只有精品6| 久久亚洲精品成人| 亚洲欧洲av一区二区| 69影院欧美专区视频| 亚洲男人天堂手机在线| 精品美女久久久久久免费| 日韩久久免费电影|