zoukankan      html  css  js  c++  java
  • Socket 传送文件

    服务器端:

     Thread recvThread;
     private void StartReceive()
     {
         recvThread = new Thread(new ThreadStart(Recv));
         recvThread.IsBackground = false;
         recvThread.Start();
     }
     Socket listenSocket;
     private void Recv()
     {
        IPEndPoint local = new IPEndPoint(Dns.GetHostByName(Dns.GetHostName()).AddressList[0], 2005);
        EndPoint localEP = (EndPoint)local;
        listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //定义Socket并初始化
        listenSocket.Bind(localEP);
        listenSocket.Listen(10);
        while (true)
        {
           Socket socket = listenSocket.Accept();
           if (socket.Connected)
           {
               //先接收文件名
               byte[] fileNameBuffer = new byte[1024];
               socket.Receive(fileNameBuffer, 0, fileNameBuffer.Length, SocketFlags.None);
               string fileName = Encoding.UTF8.GetString(fileNameBuffer);
               string[] str = fileName.Split(new char[] { '#' });
               fileName = str[0];
               string pathRecv = "d:\aaa\" + fileName;
               FileStream file = new FileStream(pathRecv, FileMode.OpenOrCreate, FileAccess.Write); //写入文件流
               //再接收文件内容
               byte[] buffer = new byte[1024];
               int bytesRecv;
               int totalBytes = 0;
               do
               {
                   bytesRecv = socket.Receive(buffer, 0, buffer.Length, SocketFlags.None);
                   totalBytes += bytesRecv;
                   file.Write(buffer, 0, bytesRecv);
               } while (bytesRecv > 0);
               socket.Close();
               file.Close();
           }
        }
     }

    客户端

         private void SendFile(string path, string ip, int port)
            {
                IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(ip), port); //构造结点
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                try
                {
                    socket.Connect(remoteEP);
                }
                catch
                {
                    MessageBox.Show("对方不在");
                }
                if (socket.Connected)
                {
                    FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read);
                    string fileName = fs.Name;
                    int begin = fileName.LastIndexOf("\");
                    fileName = fileName.Substring(fileName.LastIndexOf("\") + 1, fileName.Length - begin - 1);
                    fileName += "#";
                    //先把文件名发过去
                    byte[] fileNameBuffer = new byte[1024];
                    fileNameBuffer = Encoding.UTF8.GetBytes(fileName);
                    socket.Send(fileNameBuffer, 0, fileNameBuffer.Length, SocketFlags.None);
                    //再把文件内容发过去
                    byte[] fileBuffer = new byte[1024];
                    int bytesRead;
                    int totalBytes = 0;
                    try
                    {
                        do
                        {
                            bytesRead = fs.Read(fileBuffer, 0, fileBuffer.Length);
                            socket.Send(fileBuffer, 0, bytesRead, SocketFlags.None);
                            totalBytes += bytesRead;
                        } while (bytesRead > 0);
                        MessageBox.Show("发送完毕");
                        fs.Close();
                        socket.Close();
                    }
                    catch
                    {
                        MessageBox.Show("发送文件错误");
                    }
                }
            }
  • 相关阅读:
    oracle中job定时调用存储过程的实例
    oracle recyclebin详解(闪回删除的表)
    启动和禁用约束及删除违反约束的记录
    儒轩画的老鼠
    SQLServer2005重建索引
    [转]你真的了解 console 吗
    [转]C# 理解lock
    [转]大话 程序猿 眼里的 高并发
    莆田系医院名单
    .Net WEB 程序员需要掌握的技能
  • 原文地址:https://www.cnblogs.com/xiaocaibaodao/p/3164542.html
Copyright © 2011-2022 走看看