首页 > 编程 > C# > 正文

C#使用Socket上传并保存图片的方法

2020-01-24 01:57:05
字体:
来源:转载
供稿:网友

本文实例讲述了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;   }  } }}

希望本文所述对大家的C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表