C# 通過Socket上傳并保存圖片的代碼

mb78 9年前發布 | 3K 次閱讀 C#

C# 通過Socket上傳并保存圖片的代碼
string filename = openFile.FileName;即返回帶全路徑的文件名 Path.GetFileNameWithoutExtension(filename)即可獲得不帶路徑、后綴名的文件名。 上傳圖片使用二進制 tcp協議上傳的 客戶端代碼

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


namespace socketClient
{
    public partial class Form1 : Form
    {
        Socket clientSocket;
        private static byte[] result = new byte[1024];

        public Form1()
        {
            InitializeComponent();
        }


        private void buttonBegin_Click(object sender, EventArgs e)
        {
            //設定服務器IP地址
            IPAddress ip = IPAddress.Parse("127.0.0.1");
            clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                clientSocket.Connect(new IPEndPoint(ip, 8000)); //配置服務器IP與端口
            }
            catch
            {
                MessageBox.Show("連接服務器失敗");

                return;
            }       
        }

        private void buttonClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }
private void buttonSelect_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFile = new OpenFileDialog();
            openFile.Filter = "圖像文件(*.bmp;*.gif;*.jpg;*.jpeg;*.png)|*.bmp;*.gif;*.jpg;*.jpeg;*.png";
            openFile.Multiselect = false;

            if (openFile.ShowDialog() == DialogResult.OK)
            {
                textBox2.Text =openFile.FileName;
            }
            //string filename = openFile.FileName;
            //即返回帶全路徑的文件名

            //Path.GetFileNameWithoutExtension(filename)即可獲得不帶路徑、后綴名的文件名。
            byte[] msg = Encoding.Default.GetBytes(Path.GetFileNameWithoutExtension(openFile.FileName));
            clientSocket.Send(msg);

            try
            {
                //開始使用socket發送文件
                FileStream fs = new FileStream(openFile.FileName, FileMode.OpenOrCreate, FileAccess.Read);
                byte[] fssize = new byte[fs.Length];
                BinaryReader strread = new BinaryReader(fs);
                strread.Read(fssize, 0, fssize.Length - 1);
                clientSocket.Send(fssize);
                fs.Close();

                clientSocket.Shutdown(System.Net.Sockets.SocketShutdown.Send);
                clientSocket.Close();

            }
            catch (Exception ex)
            {
                string s = ex.ToString();
                return;
            }
        }
}
}
服務器端代碼
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.IO;
using System.Drawing.Imaging;

namespace socketServer
{
    public partial class Form1 : Form
    {
        private static byte[] result = new byte[1024];
         Socket serverSocket;
        public Form1()
        {
            InitializeComponent();
        }
     private void button1_Click(object sender, EventArgs e)
        {
           try
            {
            IPAddress ip = IPAddress.Parse("127.0.0.1");
            IPEndPoint iep = new IPEndPoint(ip, 8000);
            serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            serverSocket.Bind(iep);  
            serverSocket.Listen(10);            
            byte[] recvBytes = new byte[1024];
            int bytes = newSocket.Receive(recvBytes, recvBytes.Length, SocketFlags.None);//從客戶端接受信息 
            string name = Encoding.ASCII.GetString(recvBytes, 0, bytes);
            textBox1.Text = name+".jpg";

                //設置接收數據緩沖區的大小 
                byte[] b = new byte[1024 * 4];
                MemoryStream fs = new MemoryStream();
                int got = 0;
                int datalength = 0;

                while (true)
                {
                    got = newSocket.Receive(b);
                    fs.Write(b, 0, got);
                    if (got > 0)
                        datalength = datalength + got;
                    else
                        break;
                }
                Bitmap Img = new Bitmap(fs);
                pictureBox1.Image = Img;
                string filename = name + ".jpg";
                Img.Save(@"D:images"+filename, ImageFormat.Jpeg);

                //關閉寫文件流
                fs.Close();
                //關閉接收數據的Socket 
                newSocket.Shutdown(System.Net.Sockets.SocketShutdown.Receive);
                newSocket.Close();       
            }
            catch (Exception se)
            {
                serverSocket.Close();
                MessageBox.Show("連接錯誤" + se.ToString());
                return;
            }
}
}
}
 本文由用戶 mb78 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!