关于网友提出的“ 内存流的文件”问题疑问,本网通过在网上对“ 内存流的文件”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 内存流的文件
描述: /*
*
* 客户端
*
*/
///
/// 屏幕监控
///
public void ViewScreen()
{
Socket s = null;
try
{
//监听端口
this.tcpLook = new TcpListener((int)EnumPort.PORT.屏幕监控);
this.tcpLook.Start();
//取得通道
s = this.tcpLook.AcceptSocket();
NetworkStream prictNS = new NetworkStream(s);
}
catch(Exception)
{
}
try
{
while (true)
{
Thread.Sleep(100);
/*确定图片的像素*/
Bitmap image = new Bitmap(1024, 768);
//从指定的 Image 创建新的 Graphics。
Graphics g = Graphics.FromImage(image);
/*确定图片的大小 坐标 像素 */
g.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(1024, 768));
IntPtr ipt = g.GetHdc();
g.ReleaseHdc(ipt);
//内存流
MemoryStream ms = new MemoryStream();
//把图片保存到内存中
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
//pictureBox1显示图片
this.pictureBox1.Image = Image.FromStream(ms);
int number = 0;
//定义一个字节大小
byte[] bt = new byte[1024];
//从内存的流里读取内容
while ((number = ms.Read(bt, 0, bt.Length)) > 0)
{
//发送内容
prictNS.Write(bt, 0, number);
//刷新
prictNS.Flush();
}
//关闭内存流
ms.Close();
//销毁
ms.Dispose();
//销毁图片
image.Dispose();
}
}
catch(Exception)
{
}
}
/*
*
* 服务端
*
*/
//连接
TcpClient tc = new TcpClient(((IPEndPoint)sk.RemoteEndPoint).Address.ToString(), (int)EnumPort.PORT.屏幕监控);
//取得流管道
NetworkStream ns = tc.GetStream();
try
{
while (true)
{
int number = 0;
//字节数组大小
byte[] bt = new byte[1024];
MemoryStream ms = new MemoryStream();
//接收发来的字节数
while ((number = ns.Read(bt, 0, bt.Length)) > 0)
{
//写到内存流中
ms.Write(bt, 0, number);
//刷新
ms.Flush();
}
//pictureBox1显示发过来的图片
this.pictureBox1.Image = Image.FromStream(ms);
关闭流
ms.Close();
}
}
catch(Exception)
{
}
为什么我的客户端这段代码老实没执行啊
while ((number = ms.Read(bt, 0, bt.Length)) > 0)
{
//发送内容
prictNS.Write(bt, 0, number);
//刷新
prictNS.Flush();
}
MessageBox.Show(ms.Read(bt, 0, bt.Length).ToString());打印出来是0啊
为什么读不出内存流里面的内容啊 请大家帮帮忙啊
解决方案1: 需要MemoryStream的内容?不必读的。ToArray就可以了。
以上介绍了“ 内存流的文件”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2150864.html