这是代码,
 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        TcpListener listener;
        TcpClient remoteClient;
        private void Form1_Load(object sender, EventArgs e)
        {
            listener = new TcpListener(new IPEndPoint(IPAddress.Any, 6000));//ip为服务器IP地址,port为监听的端口
            listener.Start();//开启监听           
        }
        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;                 
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            remoteClient = listener.AcceptTcpClient();       
            NetworkStream streamToClient = remoteClient.GetStream();
            byte[] buffer = new byte[remoteClient.ReceiveBufferSize];  // BufferSize为缓存的大小
            int bytesRead;
            try
            {
               bytesRead = streamToClient.Read(buffer, 0, buffer.Length);                   
               MemoryStream ms = new MemoryStream(buffer);
                Image img = Image.FromStream(ms);
                this.pictureBox1.Image = img;        
            }
            catch
            {
                MessageBox.Show("错误!");
                return;
            }            
        }
    }c#缓存buffer数据

解决方案 »

  1.   

    而java服务器段则没有这个问题。以下是java代码。
    public class ImageServer {
     public static ServerSocket ss = null;
        
        public static void main(String args[]) throws IOException{    
         ss = new ServerSocket(6000);
            
            final ImageFrame frame = new ImageFrame(ss);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);        
            while(true){
             frame.panel.getimage();
                frame.repaint();
            }        
        }
    }
    /** 
    A frame with an image panel
    */
    @SuppressWarnings("serial")
    class ImageFrame extends JFrame{
    public ImagePanel panel;public ImageFrame(ServerSocket ss){
        // get screen dimensions       
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int screenHeight = screenSize.height;
        int screenWidth = screenSize.width;    // center frame in screen
        setTitle("ImageTest");
        setLocation((screenWidth - DEFAULT_WIDTH) / 2, (screenHeight - DEFAULT_HEIGHT) / 2);
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);    // add panel to frame
        this.getContentPane().setLayout(null);
        panel = new ImagePanel(ss);
        panel.setSize(640,480);
        panel.setLocation(0, 0);
        add(panel);
    }public static final int DEFAULT_WIDTH = 640;
    public static final int DEFAULT_HEIGHT = 560;  
    }/**
    A panel that displays a tiled image
    */
    @SuppressWarnings("serial")
    class ImagePanel extends JPanel {     
    private ServerSocket ss;
    private Image image;
    private InputStream ins;
     
    public ImagePanel(ServerSocket ss) {  
        this.ss = ss;
    }public void getimage() throws IOException{
    Socket s = this.ss.accept();
        this.ins = s.getInputStream();
    this.image = ImageIO.read(ins);
    this.ins.close();
    }public void paintComponent(Graphics g){  
        super.paintComponent(g);    
        if (image == null) return;
        g.drawImage(image, 0, 0, null);
    }}