首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

Socket发送图片如何解决

2012-04-24 
Socket发送图片怎么解决?S给C发送图片,代码如下C# codeS核心代码//发送private void button1_Click(object

Socket发送图片怎么解决?
S给C发送图片,代码如下


C# code
 

S核心代码

//            发送
        private void button1_Click(object sender, EventArgs e)
        {
                MemoryStream ms = new MemoryStream();
            MyImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            ms.Position = 0;
            myData= new Byte[1024];
            myData = ms.ToArray();
            MemoryStream ms2 = new MemoryStream();
            ms2.Write(myData, 0, myData.Length);
            Thread thread = new Thread(new ThreadStart(sendimage));
            thread.Start();
        }
// 图片发送
private void sendimage()
        {
            if (!isconnected)
            {
                IPAddress ip = IPAddress.Parse("192.168.0.2");
                IPEndPoint endpoint = new IPEndPoint(ip, 9000);
                mysocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                mysocket.Connect(endpoint);

                isconnected = true;
            }
            mysocket.Send(myData);
        }


C核心代码
  private void Form2_Load(object sender, EventArgs e)
        {
            Thread thread = new Thread(new ThreadStart(ReceiveImage));
            thread.Start();
        }

private void ReceiveImage()
        {
            listenser = new TcpListener(IPAddress.Parse("192.168.0.2"), 9000);
            listenser.Start();
            socket = listenser.AcceptSocket();
            isconnected = true;

        }
private void timer1_Tick(object sender, EventArgs e)
        {
            if (!isconnected)
            {
                return;
            }
            //MessageBox.Show("1");
            MemoryStream mystream = new MemoryStream();
            int number = 0;
            //                        1024*1024
            byte[] imagebyte = new byte[1048576];
            mystream.Position = 0;
            number = socket.Receive(imagebyte);
            if (number > 0)
            {
                mystream.Write(imagebyte, 0, number);
                imagebyte = new byte[1048576];


                pictureBox1.Image = Image.FromStream(mystream);
            }
            else
            {
                return;
            }
        }



// 说明,上面代码发送一张图片从S给C可以,没问题,但是发送第2张,用timer就会一直等待接收,屏幕如同卡死
但是如果不用timer,怎么连续接收2张图片呢?他接收一张后,就停止了,并且跳出了新开的进程,怎么让那个进程
ReceiveImage(),一直等待接收图片并显示

[解决办法]
把接收的代码放在while(true){}里面

热点排行