服务器 有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瞬间写满字符乱码 然后程序瞬间关闭~~各位大哥大姐帮忙啊~~小弟的程序 就插图片传送这里了,帮忙解决 万分拜谢!!!!!!!!  

解决方案 »

  1.   

    楼主太强大了。
    佩服。data2 += "#" + data1;
    此处能不能改为  data2 = "#" + data2;
    在服务端,判断如果数据以#开头,认为是图片。
      

  2.   

    哦 对对对 data2 += "#" + data1;这句应该是我写错了 确实是data2 = "#" + data2; 不过流到字符串 然后又转回流 不知道其中的图片信息 转来转去  会不会有信息丢失~~服务器端 我也试过用 string的startwith()判断是否是以#开头  不过还是不行。~~希望有高人可以帮忙把程序改一下~