C#使用Socket上傳并保存圖片的方法
更新時間:2015年04月22日 12:23:26 作者:令狐不聰
這篇文章主要介紹了C#使用Socket上傳并保存圖片的方法,涉及C#使用Socket進行文件傳輸?shù)南嚓P技巧,具有一定參考借鑒價值,需要的朋友可以參考下
本文實例講述了C#使用Socket上傳并保存圖片的方法。分享給大家供大家參考。具分析如下:
使用string filename = openFile.FileName;即返回帶全路徑的文件名 Path.GetFileNameWithoutExtension(filename)即可獲得不帶路徑、后綴名的文件名。 上傳圖片使用二進制 tcp協(xié)議上傳的
客戶端代碼:
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發(fā)送文件
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";
//設置接收數(shù)據(jù)緩沖區(qū)的大小
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();
//關閉接收數(shù)據(jù)的Socket
newSocket.Shutdown(System.Net.Sockets.SocketShutdown.Receive);
newSocket.Close();
}
catch (Exception se)
{
serverSocket.Close();
MessageBox.Show("連接錯誤" + se.ToString());
return;
}
}
}
}
希望本文所述對大家的C#程序設計有所幫助。
相關文章
C#動態(tài)創(chuàng)建button按鈕的方法實例詳解
這篇文章主要介紹了C#動態(tài)創(chuàng)建button按鈕的方法實例詳解的相關資料,需要的朋友可以參考下2017-06-06
c#基礎之數(shù)組與接口使用示例(遍歷數(shù)組 二維數(shù)組)
本文主要介紹了c#基礎知識中的數(shù)組與接口使用方法,結合示例,大家一看就明白2014-01-01
c#不使用windows api函數(shù)打開我的電腦和獲取電腦驅(qū)動器信息
這篇文章主要介紹了c#不使用windows api函數(shù)打開我的電腦和電腦驅(qū)動器信息的方法,大家參考使用2013-12-12
C#中LINQ?to?DataSet操作及DataTable與LINQ相互轉(zhuǎn)換
這篇文章介紹了C#中LINQ?to?DataSet操作及DataTable與LINQ相互轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05

