服务器与客户端之间的远程图片传输
2008-10-21 16:42
375 查看
一、共享类
定义一个远程对象类的定义:
接口:
public interface IFileServer
{
byte[] DownLoad(string path, string user, bool rplace);//实现从服务器上下载图片的方法
void UpLoad(string path, string user, bool rplace, byte[] bytes););//实现从客户端上传图片的方法
}
实现的方法:
public class FileClass : MarshalByRefObject, IFileServer
{
#region IFileServer 成员
public byte[] DownLoad(string path, string user, bool rplace)
{
string filepath = path+user+".jpg";
using (FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read))
{
byte[] bt = new byte[fs.Length];
fs.Read(bt, 0,(int) fs.Length);//将文件写为字节数组
fs.Close();
return bt;
}
}
public void UpLoad(string path, string user, bool rplace, byte[] bytes)
{
string filepath = path + user + ".jpg";
using (FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate,FileAccess.Write))
{
fs.Write(bytes , 0, (int)bytes.Length);
fs.Close();
}
}
#endregion
}
二、服务器端
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp ;
using File;
using System.Security.Permissions;
using System.Runtime.Remoting;
namespace FileServer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
TcpServerChannel HPChannel = new TcpServerChannel(9002);
ChannelServices.RegisterChannel(HPChannel);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(FileClass), "fileserver",
WellKnownObjectMode.Singleton);
MessageBox.Show("服务已经启动!");
}
}
}
三、客户端程序:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using File;
using System.IO;
namespace FileClient
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
TcpClientChannel hc = new TcpClientChannel();
ChannelServices.RegisterChannel(hc);
IFileServer IFileS = (IFileServer)Activator.GetObject(typeof(IFileServer), "tcp://" + textBox2.Text + ":9002/fileserver");
string user = textBox1.Text;
byte[] bytes;
bytes = IFileS.DownLoad(@"D:/", user, false);
using (MemoryStream ms = new MemoryStream(bytes))
{
Image bp1 = Image.FromStream(ms);
pictureBox1.Image = bp1;
ms.Close();
}
}
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog fd = new OpenFileDialog();
fd.Title = "打开图像文件";
fd.Filter = "图像文件(*.jpg)|*.JPG|位图(*.bmp)|*.bmp|所有文件(*.*)|*.*";
if (fd.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(fd.FileName);
}
}
private void button3_Click(object sender, EventArgs e)
{
IFileServer IFileS = (IFileServer)Activator.GetObject(typeof(IFileServer), "tcp://" + textBox2.Text + ":9002/fileserver");
string user = textBox1.Text;
byte[] bytes;
using (MemoryStream stream = new MemoryStream())
{
pictureBox1.Image.Save(stream,System.Drawing.Imaging.ImageFormat.Jpeg);
int length = (int)stream.Length;
bytes = stream.ToArray();
stream.Close();
}
IFileS.UpLoad(@"D:/", user, false, bytes);
}
}
}
定义一个远程对象类的定义:
接口:
public interface IFileServer
{
byte[] DownLoad(string path, string user, bool rplace);//实现从服务器上下载图片的方法
void UpLoad(string path, string user, bool rplace, byte[] bytes););//实现从客户端上传图片的方法
}
实现的方法:
public class FileClass : MarshalByRefObject, IFileServer
{
#region IFileServer 成员
public byte[] DownLoad(string path, string user, bool rplace)
{
string filepath = path+user+".jpg";
using (FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read))
{
byte[] bt = new byte[fs.Length];
fs.Read(bt, 0,(int) fs.Length);//将文件写为字节数组
fs.Close();
return bt;
}
}
public void UpLoad(string path, string user, bool rplace, byte[] bytes)
{
string filepath = path + user + ".jpg";
using (FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate,FileAccess.Write))
{
fs.Write(bytes , 0, (int)bytes.Length);
fs.Close();
}
}
#endregion
}
二、服务器端
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp ;
using File;
using System.Security.Permissions;
using System.Runtime.Remoting;
namespace FileServer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
TcpServerChannel HPChannel = new TcpServerChannel(9002);
ChannelServices.RegisterChannel(HPChannel);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(FileClass), "fileserver",
WellKnownObjectMode.Singleton);
MessageBox.Show("服务已经启动!");
}
}
}
三、客户端程序:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using File;
using System.IO;
namespace FileClient
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
TcpClientChannel hc = new TcpClientChannel();
ChannelServices.RegisterChannel(hc);
IFileServer IFileS = (IFileServer)Activator.GetObject(typeof(IFileServer), "tcp://" + textBox2.Text + ":9002/fileserver");
string user = textBox1.Text;
byte[] bytes;
bytes = IFileS.DownLoad(@"D:/", user, false);
using (MemoryStream ms = new MemoryStream(bytes))
{
Image bp1 = Image.FromStream(ms);
pictureBox1.Image = bp1;
ms.Close();
}
}
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog fd = new OpenFileDialog();
fd.Title = "打开图像文件";
fd.Filter = "图像文件(*.jpg)|*.JPG|位图(*.bmp)|*.bmp|所有文件(*.*)|*.*";
if (fd.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(fd.FileName);
}
}
private void button3_Click(object sender, EventArgs e)
{
IFileServer IFileS = (IFileServer)Activator.GetObject(typeof(IFileServer), "tcp://" + textBox2.Text + ":9002/fileserver");
string user = textBox1.Text;
byte[] bytes;
using (MemoryStream stream = new MemoryStream())
{
pictureBox1.Image.Save(stream,System.Drawing.Imaging.ImageFormat.Jpeg);
int length = (int)stream.Length;
bytes = stream.ToArray();
stream.Close();
}
IFileS.UpLoad(@"D:/", user, false, bytes);
}
}
}
相关文章推荐
- 客户端C和服务器S之间建立一个TCP连接,该连接总是以1KB的最大段长发送TCP段,客户端C有足够的数据要发送。当拥塞窗口为16KB的时候发生超时,如果接下来的4个RTT往返时间内的TCP段的传输是成
- 使用SecureCRT软件在客户端与服务器之间进行文件传输(不能传输文件夹)
- android客户端和java服务端之间用socket来传输图片
- android客户端和java服务端之间用socket来传输图片
- ActiveMQ学习笔记01 - 客户端与服务器之间的传输连接
- Android:客户端和服务器之间传输数据加密
- (TCP模式)客户端与服务器之间的文件传输
- ActiveMQ学习笔记01 - 客户端与服务器之间的传输连接
- 本地与远程服务器之间的文件传输
- json在服务器与客户端之间传输的一篇文章
- FMS服务器和客户端之间的远程调用实现
- Java Socket客户端服务器之间的文件传输
- thrift编写服务器/客户端实现图片传输(c++)
- 解如何利用 XML 和 JavaScript Object Notation 在 Ajax 客户端和 Java 服务器之间传输数据。
- 服务器之间,远程传输一些数据(不经过URL)
- ActiveMQ学习笔记01 - 客户端与服务器之间的传输连接
- android客户端和java服务端之间用socket来传输图片(示例代码)
- 使用python中的socket实现服务器和客户端,并完成图片的传输。
- android客户端和java服务端之间用socket来传输图片
- Qt实现服务器与客户端传输文字和图片(Qt②)