服务器 有pictureBox 显示图片 richbox显示文字
客户端 一个发送图片按钮 一个发送文字按钮~客户端发送图片按钮: //吧图片转换为流
MemoryStream ms = new MemoryStream(); // 吧图片转化为内存流
bmSave.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); //bmSave就是Bitmap类型的图片对象
byte[] data1 = ms.ToArray(); //data1把图片内存流转化为bute数组
string data2 = Convert.ToBase64String(data1 ); //data2吧bute转化为字符窜
data2 += "#" + data1; //在图片信息的字符窜 头 加入 头标示 ”#“
data1 = Encoding.BigEndianUnicode.GetBytes(data2.ToCharArray());//重新吧字符转回byte[]为了传输
ms.Close(); try
{
acceptedSocket.Send(data1 , data1 .Length , 0);//发送给服务器的 bute[]流
}
catch { }
服务器的消息接受线程方法: private void Proccess() //接受客户端信息 线程
{
if (socket.Connected)
{
label1.Text = "已经检测到成功上线!!";
while (flag)
{
string[] image; //image字符数组 为了接收
byte[] receiveByte = new byte[640]; //新建receiveByte
socket.Receive(receiveByte, receiveByte.Length, 0); //接收流中的信息 写入receiveByte
string strInfo = Encoding.BigEndianUnicode.GetString(receiveByte);//流转化为 字符窜 if (strInfo.IndexOf("#")!=-1) //如果字符串 含有 # 就是图片 不含有-1 就是文字信息【极可能错..】
{
image = strInfo.Split('#');//split()分割字符窜 想去掉#头 ,返回的string[]写入 image【不怎么会用split(),随便解释以下~~谢谢】
byte[] Aby = Convert.FromBase64String(image.ToString());//字符串数组 转化为 byte[]
Bitmap AgetMap = new Bitmap(new MemoryStream(Aby), true);//byte流转化为图片格式
this.pictureBox1.Image = AgetMap; //写入pictureBox..
}
else { richTextBox1.AppendText(strInfo + "\n"); }//不含有# 则做文字处理 。 }
}
运行结果:发送文字 没问题.. 但是发送图片 个人推测 是到 if(strInfo.IndexOf("#")!=-1)还是当作文字处理 结果richTextBox1可能放不下图片的字符窜信息 richbox瞬间写满字符乱码 然后程序瞬间关闭~~各位大哥大姐帮忙啊~~小弟的程序 就插图片传送这里了,帮忙解决 万分拜谢!!!!!!!!
客户端 一个发送图片按钮 一个发送文字按钮~客户端发送图片按钮: //吧图片转换为流
MemoryStream ms = new MemoryStream(); // 吧图片转化为内存流
bmSave.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); //bmSave就是Bitmap类型的图片对象
byte[] data1 = ms.ToArray(); //data1把图片内存流转化为bute数组
string data2 = Convert.ToBase64String(data1 ); //data2吧bute转化为字符窜
data2 += "#" + data1; //在图片信息的字符窜 头 加入 头标示 ”#“
data1 = Encoding.BigEndianUnicode.GetBytes(data2.ToCharArray());//重新吧字符转回byte[]为了传输
ms.Close(); try
{
acceptedSocket.Send(data1 , data1 .Length , 0);//发送给服务器的 bute[]流
}
catch { }
服务器的消息接受线程方法: private void Proccess() //接受客户端信息 线程
{
if (socket.Connected)
{
label1.Text = "已经检测到成功上线!!";
while (flag)
{
string[] image; //image字符数组 为了接收
byte[] receiveByte = new byte[640]; //新建receiveByte
socket.Receive(receiveByte, receiveByte.Length, 0); //接收流中的信息 写入receiveByte
string strInfo = Encoding.BigEndianUnicode.GetString(receiveByte);//流转化为 字符窜 if (strInfo.IndexOf("#")!=-1) //如果字符串 含有 # 就是图片 不含有-1 就是文字信息【极可能错..】
{
image = strInfo.Split('#');//split()分割字符窜 想去掉#头 ,返回的string[]写入 image【不怎么会用split(),随便解释以下~~谢谢】
byte[] Aby = Convert.FromBase64String(image.ToString());//字符串数组 转化为 byte[]
Bitmap AgetMap = new Bitmap(new MemoryStream(Aby), true);//byte流转化为图片格式
this.pictureBox1.Image = AgetMap; //写入pictureBox..
}
else { richTextBox1.AppendText(strInfo + "\n"); }//不含有# 则做文字处理 。 }
}
运行结果:发送文字 没问题.. 但是发送图片 个人推测 是到 if(strInfo.IndexOf("#")!=-1)还是当作文字处理 结果richTextBox1可能放不下图片的字符窜信息 richbox瞬间写满字符乱码 然后程序瞬间关闭~~各位大哥大姐帮忙啊~~小弟的程序 就插图片传送这里了,帮忙解决 万分拜谢!!!!!!!!
佩服。data2 += "#" + data1;
此处能不能改为 data2 = "#" + data2;
在服务端,判断如果数据以#开头,认为是图片。