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#程序设计有所帮助。

(0)

相关推荐

  • C#实现图片上传(PC端和APP)保存及 跨域上传说明

    A-PC端: 1-页面--multiple是控制单张还是多张图片上传 <input id="BusRoute" type="file" class="btn btn-default btn-lg" style="height:34px;padding-top:5px;padding-bottom:5px;" multiple /> 2-后台获取图片文件: HttpFileCollection pcFileColl

  • C#图片上传效果实例分析

    本文实例讲述了C#图片上传效果实现方法.分享给大家供大家参考.具体如下: <%@ Page Title="" Language="C#" MasterPageFile="~/Default.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %> <asp:Conte

  • c#批量上传图片到服务器示例分享

    客户端代码: 复制代码 代码如下: /// <summary>/// 批量上传图片/// </summary>/// <param name="srcurl">服务器路径</param>/// <param name="imagesPath">图片文件夹路径</param>/// <param name="files">图片名称</param>publ

  • C#实现图片上传与浏览切换的方法

    本文以一个完整实例讲述了C#实现图片上传与浏览切换的方法,对于进行C#程序设计来说具有一定的借鉴价值.分享给大家供大家参考. 具体实现代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %> <!DOCTYPE html PUBLIC "-//W3C//

  • ASP.NET(C#)实现一次性动态上传多张图片的代码(多个文件)

    在做asp.net的Web开发的时候,我们经常会遇到一次性上传多个文件的需求.通常我们的解决方法是固定放多个上传文件框,这样的解决办法显然是不合理的,因为一次上传多个,就意味着数量不确定.因此我们就要让这些文件上传框动态添加,下面我以我做的一个图库管理中的上传图片的功能为例 先看效果: 打开的初始界面: 默认是上传一个图片,但当我们点"增加图片"按钮时可以实现选择多个图片及其描述同时上传,本功能限制一次最多只能上传8张,且每张图片大小不超过1M,这个大家可根据实际情况更改! 如图: 下

  • C#判断上传文件是否是图片以防止木马上传的方法

    很多时候木马程序会伪装成其他格式的文件上传到网站,最常见的如图片格式.本文就以C#为例讲述C#判断上传文件是否是图片以防止木马上传的方法,具体方法如下: 方法一:用image对象判断是否为图片 /// <summary> /// 判断文件是否为图片 /// </summary> /// <param name="path">文件的完整路径</param> /// <returns>返回结果</returns> pu

  • c#多图片上传并生成缩略图的实例代码

    前台代码: 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="upload.aspx.cs" Inherits="upload" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&q

  • 基于C# winform实现图片上传功能的方法

    本文所述实例实现将一张图片上传到指定的文件夹,然后在窗体上的PictrueBox控件中显示出来. 具体功能代码如下: private void btnUpload_Click(object sender, EventArgs e) { //创建一个对话框对象 OpenFileDialog ofd = new OpenFileDialog(); //为对话框设置标题 ofd.Title = "请选择上传的图片"; //设置筛选的图片格式 ofd.Filter = "图片格式|*

  • C# 最齐全的上传图片方法

    方法里包括了图片大小限制.图片尺寸.文件内容等等的判断... 该案例是mvc下的demo,支持单张图片上传. public ActionResult Upload() { string imgurl = ""; foreach (string key in Request.Files) { //这里只测试上传第一张图片file[0] HttpPostedFileBase file0 = Request.Files[key]; //转换成byte,读取图片MIME类型 Stream st

  • c#图片上传和显示的实现方法

    由于需要图片上传的功能,所以花了一些时间网上找相关资料终于搞定,效果图如下: 下面的是解决方案截图和上传的图片截图: 具体实现代码如下: 1.界面代码 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UploadPic.aspx.cs" Inherits="Pic_Try.UploadPic" %> <!DOCTYPE html PUBLIC

  • C#保存上传来的图片示例代码

    复制代码 代码如下: [HttpPost] public string UploadImage() { //string ss = Request.Form["uploadFile"]; //return ss; HttpPostedFileBase uploadFile = Request.Files[0]; string fileName = uploadFile.FileName; int fileSize = uploadFile.ContentLength; string f

随机推荐