zoukankan      html  css  js  c++  java
  • C# Winform局域网传送文件

            //发送文件
            private void btn_sendFile_Click(object sender, EventArgs e)
            {
                //打开文件
                OpenFileDialog dlg = new OpenFileDialog();
    
                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    //初始化接受套接字:寻址方案,以字符流方式和Tcp通信
                    socketSent = new Socket(AddressFamily.InterNetwork,
                           SocketType.Stream,
                           ProtocolType.Tcp);
    
                    //设置服务器IP地址和端口
                    ipSent = new IPEndPoint(IPAddress.Parse(ip), 8001);
                    //与服务器进行连接
    
                    ClassSocket socketConnet = new ClassSocket(socketSent, ipSent);
                    Thread tConnection = new Thread(new ThreadStart(socketConnet.SocketConnect));
                    tConnection.Start();
    
                    Thread.Sleep(100);
                    //将要发送的文件加上"DAT"标识符
    
                    ClassSentFile sentFile = new ClassSentFile(dlg, socketSent);
                    Thread tSentFile = new Thread(new ThreadStart(sentFile.SentFile));
                    tSentFile.Start();
    
                    
                }
            }

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Net;
    using System.Net.Sockets;
    using System.Windows.Forms;
    namespace Message
    {
        class ClassSentFile
        {
            private OpenFileDialog dlg;
            private Socket socketSent;
            public ClassSentFile(OpenFileDialog dlg, Socket socketSent)
            {
                this.dlg = dlg;
                this.socketSent = socketSent;
            }
            public void SentFile()
            {
                string msg = "DAT " + dlg.FileName;
    
                //将 "msg" 转化为字节流的形式进行传送
                socketSent.Send(Encoding.Default.GetBytes(msg));
    
    
                //定义一个读文件流
                FileStream read = new FileStream(dlg.FileName, FileMode.Open, FileAccess.Read);
    
                //设置缓冲区为1024byte
                byte[] buff = new byte[1024];
                int len = 0;
                while ((len = read.Read(buff, 0, 1024)) != 0)
                {
                    //按实际的字节总量发送信息
                    socketSent.Send(buff, 0, len, SocketFlags.None);
                }
    
                //将要发送信息的最后加上"END"标识符
                msg = "END";
    
                //将 "msg" 发送
                socketSent.Send(Encoding.Default.GetBytes(msg));
    
                socketSent.Close();
                read.Close();
            }
        }
    }
    

  • 相关阅读:
    设计模式小结
    Asp.net 中HttpHandler,HttpModule,IHttpHandlerFactory的原理与应用(一)
    全新对待.net一次全面的旅程
    页面生命周期小结
    面向对象点滴
    Chapter 2.1:WCF服务契约的重载与继承详解
    一封给“X教授”的回信(讨论Socket通信)
    Chapter 1.4:WCF实践 元数据详解
    有了WCF,Socket是否已人老珠黄?
    Chapter 1.3:WCF实践 HelloWorld
  • 原文地址:https://www.cnblogs.com/smartsmile/p/6234316.html
Copyright © 2011-2022 走看看