• 简单的SOcket传送文件字符串实现


    注:(程序中设置只能上传jpg格式文件,可以传其它类型文件)


    服务器
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    using System.Net.Sockets;
    using System.Net;
    using System.Threading;
    namespace WindowsApplication1
    {
        public partial class FormReceive2 : Form
        {
            public FormReceive2()
            {
                InitializeComponent();
            }

            /// <summary>
            /// 得到本机IP
            /// </summary>
            /// <returns></returns>
            public IPAddress GetServerIP()
            {
                IPHostEntry ieh = Dns.GetHostByName(Dns.GetHostName());
                return ieh.AddressList[0];
            }

            /// <summary>
            /// 接收文件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void receiveFile()
            {
                Socket receiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                ///设置接收数据的地址
                IPAddress ServerIp = GetServerIP();
                IPEndPoint hostPoint = new IPEndPoint(ServerIp, 8000);

                ///设置端口
                receiveSocket.Bind(hostPoint);
                ///监听
                Start:
                receiveSocket.Listen(2);

                ///设置接收数据缓冲区的大小
                Byte[] recData = new Byte[100000];
                Socket hostSocket = receiveSocket.Accept();
                ///接收数据
                int i = 0;
                int bytes = 0;
                ///创建一个新文件保存接收的数据
                string ImagePicture = "E:\\" + Convert.ToString(Guid.NewGuid()) + ".jpg";
                FileStream fileStream = new FileStream(ImagePicture, FileMode.OpenOrCreate);
                BinaryWriter writer = new BinaryWriter(fileStream);
                while (true)
                {
                    bytes = hostSocket.Receive(recData, recData.Length, 0);
                    //读取完成后退出循环 
                    i += bytes;
                    if (bytes <= 0)
                        break;
                    writer.Write(recData, 0, bytes);
                }
                //将读取的字节数转换为字符串    
                if (i > 0)
                {
                    ///显示接收数据的信息
                    label1.Text = "网页在" + DateTime.Now.ToString() + "接收的数据大小为:" + i.ToString();
                }

                ///关闭写文件流
                fileStream.Close();
                writer.Close();

                ///关闭接收数据的Socket
                hostSocket.Shutdown(SocketShutdown.Receive);
                hostSocket.Close();
                goto Start;
            }
            /// <summary>
            /// 接收字符
            /// </summary>
            private void receiveWord()
            {
                Socket receiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                ///设置接收数据的地址
                IPAddress ServerIp = GetServerIP();
                IPEndPoint hostPoint = new IPEndPoint(ServerIp, 8001);

                ///设置端口
                receiveSocket.Bind(hostPoint);
                ///监听
                Start:
                receiveSocket.Listen(2);

                ///设置接收数据缓冲区的大小
                Byte[] recData = new Byte[100000];
                Socket hostSocket = receiveSocket.Accept();

                string recvStr = "";
                int bytes = 0;
                while (true)
                {

                    bytes = hostSocket.Receive(recData, recData.Length, 0);
                    //读取完成后退出循环    
                    if (bytes <= 0)
                        break;
                    //将读取的字节数转换为字符串    
                    recvStr += Encoding.UTF8.GetString(recData, 0, bytes).TrimEnd().TrimStart();
                }
                recvStr = "来自IP和端口" + hostSocket.RemoteEndPoint.ToString() + "的信息" + recvStr;
                MessageBox.Show(recvStr);
                ///关闭接收数据的Socket
                hostSocket.Shutdown(SocketShutdown.Receive);
                hostSocket.Close();
                goto Start;
            }

            protected void Button1_Click(object sender, EventArgs e)
            {
                receiveFile();
            }

            private void button2_Click(object sender, EventArgs e)
            {
                receiveWord();
            }

            /// <summary>
            /// 改变Byte[]长度
            /// </summary>
            /// <param name="array"></param>
            /// <param name="newSize"></param>
            /// <returns></returns>
            private Byte[] Resize(Byte[] array, int newSize)
            {
                Byte[] newArray = new Byte[newSize];
                array.CopyTo(newArray, 0);
                return newArray;
            }
        }
    }






    客户端
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    using System.Net.Sockets;
    using System.Net;
    using System.Threading;

    namespace WindowsApplication1
    {
        public partial class FormSend2 : Form
        {
            public FormSend2()
            {
                InitializeComponent();
            }

            /// <summary>
            /// 发送文件
            /// </summary>
            private void SocketSendFile()
            {
                ///创建发送数据的Socket
                Socket sendsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                ///设置发送数据的地址
                IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("192.168.0.21"), 8000);
                ///创建读取文件的流
                if (openFileDialog1.FileName == "openFileDialog1")
                {
                    MessageBox.Show("请先选择图片");
                }
                else
                {
                    FileStream fileSteam = new FileStream(openFileDialog1.FileName, FileMode.OpenOrCreate, FileAccess.Read);
                    ///文件大小
                    Byte[] fsSize = new Byte[fileSteam.Length - 1];
                    ///读取文件的二进制流
                    BinaryReader reader = new BinaryReader(fileSteam);

                    ///读取数据
                    reader.Read(fsSize, 0, (int)fileSteam.Length - 1);
                    ///链接目的地
                    try
                    {
                        sendsocket.Connect(endPoint);
                    }
                    catch
                    {
                        MessageBox.Show("不能连接到服务器");
                        return;
                    }
                    ///发送数据
                    try
                    {
                        sendsocket.Send(fsSize);
                    }
                    catch
                    {
                        MessageBox.Show("服务器忙,请稍后再发!");
                    }

                    ///关闭文件流
                    fileSteam.Close();
                    ///关闭发送数据的Socket
                    sendsocket.Shutdown(SocketShutdown.Send);
                    sendsocket.Close();
                }
            }

            /// <summary>
            /// 发送字符
            /// </summary>
            private void SocketSendWord()
            {
                ///创建发送数据的Socket
                Socket sendsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                ///设置发送数据的地址
                IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("192.168.0.21"), 8000);
                int iLength = textBox1.Text.Length;
                //获取要发送的数据的长度
                Byte[] bySend = new byte[iLength];
                //根据获取的长度定义一个Byte类型数组
                bySend = System.Text.Encoding.UTF8.GetBytes(textBox1.Text);
                //按照指定编码类型把字符串指定到指定的Byte数组
                try
                {
                    sendsocket.Connect(endPoint);
                }
                catch
                {
                    MessageBox.Show("不能连接到服务器");
                    return;
                }
                int i = sendsocket.Send(bySend);
                ///关闭发送数据的Socket
                sendsocket.Shutdown(SocketShutdown.Send);
                sendsocket.Close();
            }


            private void button1_Click(object sender, EventArgs e)
            {
                SocketSendFile();
            }

            private void button2_Click(object sender, EventArgs e)
            {
                SocketSendWord();
            }

            private void button3_Click(object sender, EventArgs e)
            {
                this.openFileDialog1.DefaultExt = "jpg";
                // The Filter property requires a search string after the pipe ( | )
                this.openFileDialog1.Filter = "图片文档(*.*)|*.*";
                this.openFileDialog1.ShowDialog();
                try
                {
                    int j = openFileDialog1.FileName.LastIndexOf(".");
                    string ExtendName = openFileDialog1.FileName.Substring(j);
                    if (ExtendName == ".jpg" || ExtendName == ".JPG")
                    {
                        if (this.openFileDialog1.FileNames.Length > 0)
                        {
                            foreach (string filename in this.openFileDialog1.FileNames)
                            {
                                int a = filename.LastIndexOf("\\");
                                string strPath = filename.Substring(a, filename.Length - a);

                                Image ImagePicture = Image.FromFile(strPath);
                                this.pictureBox1.Image = ImagePicture;
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("只能上传jpg格式文件!");
                        return;
                    }
                }
                catch
                {
               
                }
            }
        }
    }

     

     

  • 相关阅读:
    vim编辑swap file
    fork: retry: Resource temporarily unavailable 解决方案
    扫描目录下的文件并拼接在一起
    linux 下批量创建文件夹
    存储过程批量插入表数据
    多用户登录系统操作流程——Python多线程
    触发器报错“Not allowed to return a result set from a trigger”的解决方案
    window + anaconda + python3.6 + dlib
    查看Ubantu磁盘信息
    numpy和tensorflow中矩阵乘法的区别
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/649450.html
Copyright © 2020-2023  润新知