2012-01-11 243 views
1

我是一個TCPClient的新手,我試圖製作一個網絡攝像頭應用程序,它發送的小圖像〜4kb到另一個IP將運行一個相同的程序。所以它會同時發送和接收。TCP客戶端斷開

問題我已經是_tcpOut在一次發送後斷開連接,這意味着我只能看到一幀。在下面的代碼中有兩個部分,首先,NewFrameReceived在相機的每個新圖像上運行,然後發送,另一個方法是接收方法,將接收到的圖像放入圖片框中(目前爲我自己的127.0.0.1):

private void fChat_Load(object sender, EventArgs e) 
{ 
    // fire up listener 
    listeningThread.RunWorkerAsync(); 

    // tcp server setup 
    _tcpOut = new TcpClient(); 
    _tcpOut.Connect("127.0.0.1", 54321); 
} 


    private void NewFrameReceived(object sender, NewFrameEventArgs e) 
    { 
     Bitmap img = (Bitmap)e.Frame.Clone(); 

     byte[] imgBytes = EncodeToJpeg(img, 25).ToArray(); 
     if (_tcpOut.Connected) <-- PROBLEM HERE, THIS IS FALSE ON 2ND ITERATION 
     { 
      using (NetworkStream ns = _tcpOut.GetStream()) 
      { 
       if (ns.CanWrite) 
       { 
        ns.Write(BitConverter.GetBytes(imgBytes.Length), 0, 4); 
        ns.Write(imgBytes, 0, imgBytes.Length); 
       } 
      } 
     } 
    } 


    private void listeningThread_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) 
    { 
     // start listening for connections 
     _tcpIn = new TcpListener(IPAddress.Any, 54321); 
     _tcpIn.Start(); 

     while (true) 
     { 
      using (TcpClient _inClient = _tcpIn.AcceptTcpClient()) // blocks until connected 
      { 
       using (NetworkStream stream = _inClient.GetStream()) 
       { 
        Byte[] imgSizeBytes = new Byte[4]; 
        stream.Read(imgSizeBytes, 0, 4); 
        int imgSize = BitConverter.ToInt32(imgSizeBytes, 0); 
        Byte[] imgBytes = new Byte[imgSize]; 
        stream.Read(imgBytes, 0, imgSize); 
        MemoryStream ms = new MemoryStream(imgBytes); 
        Image img = Image.FromStream(ms); 
        picVideo.Image = img; 
       } 
      } 
     } 
    } 

非常感謝提前。

回答

1

由於您將TcpClient與using聲明配置在一起,因此它斷開連接。

+0

嗨,感謝您的快速回復,我試着以系統的方式使用所有的使用,但它仍然是一樣的,但是當我把它們全部拿出來時,它繞過代碼約3次然後停止,但是圖片顯示只有1. – sprocket12 2012-01-11 23:56:27

+0

好吧,它的固定,我刪除所有使用,但我仍然有一幀,然後我移動while循環上面的_inClient,它的一切都好:) – sprocket12 2012-01-12 00:10:19