本文实例讲述了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,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,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,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,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#使用Socket上传并保存图片的方法全部内容,希望文章能够帮你解决C#使用Socket上传并保存图片的方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)