C# System.NullReferenceException when send tcp message between 2 window form app

-1

I'm new to both Threading and TCP programming.

I got a tutorial that uses a single Windows form app as both Client and Server. It works when send and receive a message from the same windows form app. But when I try to separate its client and server to different app I got NullReferenceException error and can't figure why.

Here's the code that I try to use.

Server

private void bt_start_server_Click(object sender, EventArgs e)
    {
        TCPServer obj_server = new TCPServer();
        System.Threading.Thread obj_thread = new System.Threading.Thread(obj_server.StartServer);
        obj_thread.Start();
    }

class TCPServer
    {
        TcpListener obj_server;
        public TCPServer()
        {
            obj_server = new TcpListener(IPAddress.Any, 6868);
        }

        public void StartServer()
        {
            obj_server.Start();
            while (true)
            {
                TcpClient tc = obj_server.AcceptTcpClient();
                NetworkStream ns = tc.GetStream();
                if (ns.ReadByte() == 2)
                {
                    byte[] recv_data = ReadStream(ns);
                    Form1.ActiveForm.Invoke(new MethodInvoker(delegate
                    {
                        ((Label)Form1.ActiveForm.Controls.Find("msg_label", true)[0]).Text = Encoding.UTF8.GetString(recv_data);
                    }
                    ));
                }
            }
        }

        public byte[] ReadStream(NetworkStream ns)
        {
            byte[] data_buff = null;
            int b = 0;
            String buff_length = "";
            while ((b = ns.ReadByte()) != 4)
            {
                buff_length += (char)b;
            }
            int data_length = Convert.ToInt32(buff_length);
            data_buff = new byte[data_length];
            int byte_read = 0;
            int byte_offset = 0;
            while (byte_offset < data_length)
            {
                byte_read = ns.Read(data_buff, byte_offset, data_length - byte_offset);
                byte_offset += byte_read;
            }
            return data_buff;
        }
    }

Client

private void bt_send_Click(object sender, EventArgs e)
{
    TcpClient tc = new TcpClient("127.0.0.1", 6868);
    NetworkStream ns = tc.GetStream();
    byte[] data_tosend = CreateDataPacket(Encoding.UTF8.GetBytes(tx_data_send.Text));
    ns.Write(data_tosend, 0, data_tosend.Length);
}


private byte[] CreateDataPacket(byte[] data) {
    byte[] initialize = new byte[1];
    initialize[0] = 2;
    byte[] separator = new byte[1];
    separator[0] = 4;
    byte[] datalength = Encoding.UTF8.GetBytes(Convert.ToString(data.Length));
    MemoryStream ms = new MemoryStream();
    ms.Write(initialize, 0, initialize.Length);
    ms.Write(datalength, 0, datalength.Length);
    ms.Write(separator, 0, separator.Length);
    ms.Write(data, 0, data.Length);
    return ms.ToArray();

}

error message

System.NullReferenceException: 'Object reference not set to an instance of an object.'
System.NullReferenceException
  HResult=0x80004003
  Message=Object reference not set to an instance of an object.
  Source=ThreadClient
  StackTrace:
   at ThreadClient.TCPServer.StartServer() in C:\Users\Win 10\...\ThreadClient\Form1.cs:line 79
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

At

  Form1.ActiveForm.Invoke(new MethodInvoker(delegate
                        {
                            ((Label)Form1.ActiveForm.Controls.Find("msg_label", true)[0]).Text = Encoding.UTF8.GetString(recv_data);
                        }
                        ));
c#
multithreading
tcp
nullreferenceexception
asked on Stack Overflow Nov 13, 2019 by Awit

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0