【问题标题】:tcp having trouble connecting c#tcp无法连接c#
【发布时间】:2013-12-13 10:00:10
【问题描述】:

我无法让我的 Sender 线程连接到我的 Receiver 线程。下面是我的代码(我是套接字编程的新手,所以如果你知道如何通过套接字发送图像更好,请告诉我):

发件人线程:

public void SendSS() 
    {            
        try
        {             

            while (!mainFrm.ssStop)
            {
               TcpClient ssTcpClient = new TcpClient();
                ssTcpClient.Connect(mainFrm.contactIP, 1500);                    
                if (ssTcpClient.Connected)
                {
                    Image screenShotBMP = GrabScreen();
                    NetworkStream ns = ssTcpClient.GetStream();
                    memStream = new MemoryStream();

                    screenShotBMP.Save(memStream, ImageFormat.Png);

                    byte[] bytesToSend = memStream.ToArray();                       ;
                    ns.Write(bytesToSend, 0, bytesToSend.Length);
                    ns.Flush();

                    screenShotBMP.Dispose();
                    ns.Close();
                    memStream.Close();
                    ssTcpClient.Close();
                }
            }
        }
        catch (Exception ex)
        {

            MessageBox.Show(ex.Message, "frmVoiceChat-SendSS()", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

接收线程:

public void ReceiveSS()
    {
        try
        {
            TcpListener ssTcpListener = new TcpListener(IPAddress.Any, 1500);
            while (!mainFrm.ssStop)
            {
                ssTcpListener.Start();
                TcpClient tcpReceiver = ssTcpListener.AcceptTcpClient();
                //TcpClient tcpReceiver = new TcpClient();
                ssTcpListener.AcceptTcpClient();
                //tcpReceiver.Connect(mainFrm.contactIP, 1500);
                if (tcpReceiver.Connected)
                {
                    labelText("Connected!!!");
                    //NetworkStream receivedNs = tcpReceiver.GetStream();
                    NetworkStream receivedNs = new NetworkStream(tcpReceiver.Client);
                    //ssTcpListener.Server.Receive();
                    //byte[] imageBytes = new byte[tcpReceiver.ReceiveBufferSize];
                    //receivedNs.Read(imageBytes, 0, imageBytes.Length);
                    //MemoryStream receivedMs = new MemoryStream(imageBytes);
                    //receivedNs.CopyTo(receivedMs);

                    //Image image = Image.FromStream(receivedNs); // ArgumentException: Parameter is not valid exception here.                        
                    pbScreenShare.Image = new Bitmap(receivedNs);

                    receivedNs.Close();
                    tcpReceiver.Close();
                    ssTcpListener.Stop();
                    //image.Dispose();
                    //receivedMs.Close();
                }                    
                else
                {
                    labelText("Not Connected!!!");
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "frmVoiceChat-ReceiveSS()", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

【问题讨论】:

  • 另外,我知道那里有很多注释代码,但目前我只想让两者连接起来。我习惯于处理不需要连接的 UDP,因为它们只是将数据扔到那里并希望它到达那里,但是图像文件太大了。
  • 您应该使用using 语句。
  • 您有 两个 调用 AcceptTcpClient - 此代码在 两个 客户端连接之前不会运行。这是你想要的吗?

标签: c# multithreading image sockets tcp


【解决方案1】:

您拨打AcceptTcpClient() 两次。第二个调用将等待连接并阻止其余代码执行。请清理您的代码。

【讨论】:

  • 如果您在调试器中逐行检查,也很容易发现这类问题。它会显示执行正在停止。
猜你喜欢
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 2015-07-07
  • 2019-10-17
  • 1970-01-01
  • 2019-02-11
相关资源
最近更新 更多