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

 更新时间:2015年04月22日 12:23:26   作者:令狐不聪  
这篇文章主要介绍了C#使用Socket上传并保存图片的方法,涉及C#使用Socket进行文件传输的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了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#程序设计有所帮助。

相关文章

  • C#实现简单的聊天窗体

    C#实现简单的聊天窗体

    这篇文章主要为大家详细介绍了C#实现简单的聊天窗体,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 实例详解C#正则表达式

    实例详解C#正则表达式

    这篇文章主要通过实例详解C#正则表达式的相关资料,需要的朋友可以参考下
    2016-01-01
  • C# 反射与 Quartz 实现流程处理详情

    C# 反射与 Quartz 实现流程处理详情

    根据要实现流程处理,比如用户可以定义一个定时任务,每周一查看报表。任务是用Quartz可实现,但用户自己选择报表就比较麻烦,这时因为系统的不同模块的生成报表的函数不同,这时便可以传入一个方法名和方法的输入参数,就可以调用该方法。下面小编我为大家介绍具体过程
    2021-09-09
  • C#实现将PDF转为线性化PDF

    C#实现将PDF转为线性化PDF

    线性化PDF文件是PDF文件的一种特殊格式,可以通过Internet更快地进行查看。这篇文章主要介绍了如何通过C#实现将PDF转为线性化PDF,感兴趣的小伙伴可以学习一下
    2021-12-12
  • C#入门之索引器使用实例

    C#入门之索引器使用实例

    这篇文章主要介绍了C#的索引器使用方法,对此,C#初学者应予以牢固掌握,需要的朋友可以参考下
    2014-08-08
  • C#中执行批处理文件(*.bat)的方法代码

    C#中执行批处理文件(*.bat)的方法代码

    本文介绍一下在C#中执行批处理文件(*.bat)的方法。
    2013-03-03
  • C#中实现深度优先搜索

    C#中实现深度优先搜索

    深度优先搜索(DFS)是一种遍历或搜索图或树的算法,广泛应用于迷宫寻路、图像处理、路径规划、模式识别、社交网络分析等领域,学习DFS有助于理解图结构,解决回溯问题,提升算法设计与分析能力,下面就来介绍一下
    2024-10-10
  • C#使用SqlConnection连接到SQL Server的代码示例

    C#使用SqlConnection连接到SQL Server的代码示例

    这篇文章主要介绍了C#使用SqlConnection连接到SQL Server的代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • C#读取本地网络配置信息的方法小结

    C#读取本地网络配置信息的方法小结

    在现代软件开发中,处理网络配置信息是一个常见需求,无论是开发桌面、移动还是服务器应用程序,了解如何在C#中读取和管理网络配置信息都是非常有用的,本文将探讨在C#中读取本地网络配置信息的方法,并提供几个实际应用场景的示例,需要的朋友可以参考下
    2024-10-10
  • c# 使用WebRequest实现多文件上传

    c# 使用WebRequest实现多文件上传

    这篇文章主要介绍了c# 使用WebRequest实现多文件上传的方法,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-03-03

最新评论