流程:客户端发送图片 服务器端接收图片显示
代码:
Image img = Screenshots.getScreen();//得到Image对象
MemoryStream ms = new MemoryStream();
img.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] buffer = new byte[ms.Length];
ms.Read(buffer, 0, (int)ms.Length);
ms.Close();
try
{
stm.Write(buffer, 0, buffer.Length);
stm.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
stm是已经连接好的NetworkStream对象服务器端接收代码:
byte[] tempBuffer = new byte[4096];
//FileStream fs = File.Open(new Random().Next().ToString() + ".gif", FileMode.CreateNew);
MemoryStream memStream = new MemoryStream();
int bytesRead = 0;
int length = 0;
while ((length = client.Receive(tempBuffer)) > 0)
{
memStream.Write(tempBuffer, 0, length);
}
memStream.Flush(); 错误行:Image picture = Image.FromStream(memStream);
pictureBox1.Image = picture;
memStream.Close();
client.Close();
client是已连接的socket对象现在服务器端接收时在错误行报参数错误 client.Receive()根本没有接收到 请高手帮忙看看是哪里的代码写的不对!
代码:
Image img = Screenshots.getScreen();//得到Image对象
MemoryStream ms = new MemoryStream();
img.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] buffer = new byte[ms.Length];
ms.Read(buffer, 0, (int)ms.Length);
ms.Close();
try
{
stm.Write(buffer, 0, buffer.Length);
stm.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
stm是已经连接好的NetworkStream对象服务器端接收代码:
byte[] tempBuffer = new byte[4096];
//FileStream fs = File.Open(new Random().Next().ToString() + ".gif", FileMode.CreateNew);
MemoryStream memStream = new MemoryStream();
int bytesRead = 0;
int length = 0;
while ((length = client.Receive(tempBuffer)) > 0)
{
memStream.Write(tempBuffer, 0, length);
}
memStream.Flush(); 错误行:Image picture = Image.FromStream(memStream);
pictureBox1.Image = picture;
memStream.Close();
client.Close();
client是已连接的socket对象现在服务器端接收时在错误行报参数错误 client.Receive()根本没有接收到 请高手帮忙看看是哪里的代码写的不对!
解决方案 »
- MIS系统(C#)做久了,麻木了
- TranslateTransform问题
- 麻烦大家帮我看一段代码,关于调用javaScript函数的问题
- 存储过程参数传入问题??
- FORM.SHOW();和FORM_LOAD()问题
- VS2003不能创建WEB项目
- 请大家帮忙看一下,为什么点下一条记录等按钮,textbox等的内容不随着变化。
- 怎么我把.net的检验控件放上去Button就不能提交了
- 怎么将FreeTextBox加入做好的网页中去???急!!!
- 文件操作安全问题,请微软专家和各位高手进来看看
- datagridview读取数据出现滚动条时,程序卡死,各位有解决过类似问题的给点意见
- 输入框数字计算
{
memStream.Write(tempBuffer, 0, length);
}
这不对,如果循环两次第二次会把第一次的覆盖,第二次不能从0开始写,应该从第一次的结尾开始写!!
设个计数器
所有的文件以二进制方式读取,发送,写入。
最近也在写sock通信,贴一下我的发送和接受方面的代码,希望对楼主有用。
//发送端
FileStream fs = new FileStream(@strSourcefile, FileMode.Open, FileAccess.Read, FileShare.Read);
const int nLength = 1024;
byte[] szContent = new Byte[nLength];
msgContent.bEnd = 0;
msgContent.nMessageTypes = 5;
int i = 0;
while (fs.Read(szContent, 0, nLength) != 0)
{
msgContent.content = szContent;
szContent = new Byte[nLength];
MyDict.Remove(f.ToString());
if (fs.Length == fs.Position)
{
msgContent.bEnd = 1;
data = Tool.StructToBytes(msgContent);
if (data.Length > 0)
{
i = server.Send(data, data.Length, 0);
MyDict.Add(f.ToString(), System.DateTime.Now);//最后一次发送成功,则标志写入字典
WriteDirectory(iniDicPath, MyDict);
break;
}
}
else
{
msgContent.bEnd = 0;
data = Tool.StructToBytes(msgContent);
if (data.Length > 0)
server.Send(data, data.Length, 0); while (server.Connected)
{
if (server.Available > 0)//从客户端接收消息
{
server.Receive(data, data.Length, 0);
bLinsten = true;
break;
}
else if (!bConnect)
{
fs.Close();
Log("接收端断开482");
return false;
}
Thread.Sleep(1);
}
CP2PMessage msgConAns = new CP2PMessage();
msgConAns = (CP2PMessage)Tool.BytesToStruct(data, msgConAns.GetType());
if (msgConAns.bReceive != 1)
{
break;
}
}
}
fs.Close();
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//接受端
strAimfile = strAimPath[nIndex] + "\\" + msg.filePath;
FileStream fs = new FileStream(strAimfile, FileMode.Create, FileAccess.Write,FileShare.Read);//如果文件不存在的话,新建一个。存在的话,直接写入。
while (newsock.Connected)
{
if (newsock.Available > 0)
{
data = new Byte[1024 * 10];
newsock.Receive(data, data.Length, 0);//从客户端接收消息
bLinsten = true;
CP2PMessage msgConReq = new CP2PMessage();
msgConReq = (CP2PMessage)Tool.BytesToStruct(data, msgConReq.GetType());
strContent += msgConReq.content;
fs.Write(msgConReq.content, 0, msgConReq.content.Length);
if (msgConReq.bEnd == 1)
{
break;
} CP2PMessage msgConAns = new CP2PMessage();
msgConAns.bReceive = 1;//表示收到包,请继续发
data = Tool.StructToBytes(msgConAns);
if (data.Length > 0)
{
newsock.Send(data, data.Length, 0);
}
}
if (!bConnect)
{
fs.Close();
Log("发送断开278");
return false;
}
Thread.Sleep(1);
}
fs.Close();
ms.Seek(0, SeekOrigin.Begin);
ms.Read(buffer, 0, (int)ms.Length);
ms.Close();