If $6$ and $7$ each have units $1$, and if this unit behaves like other units, then $6\times 7=42$ would have units $1^2$. My height is measured in metres, but half my height is in $\mathrm{m}1^{-1}$. If you multiply this by two you get back my height in metres, but if you add it to itself you get a quantity that's numerically equal to my height, but has units $\mathrm{m}1^{-1}$.

I think it would be rather difficult to make this consistent, so we have to conclude that if $1$ is a unit, it behaves rather differently from other units. And if that's so, why should we call it a unit at all?

To clarify: I do actually think it's fine to say the units of a quantity are $1$. This answer is only referring to the part of the question that says "is the number $1$ a unit by definition", which I took to mean "is it a base unit, like $\mathrm{m}$ or $\mathrm{K}$?"

Is the number 1 a unit?
I have the code to send and receive images via TCP that works. However, because I am sending whole images each time the bandwidth use is huge and will make my program completely unusable on slower internet connections. 

To reduce the bandwidth, it is clear I only want to send the difference between the current image and the previous one. I was hoping you could provide me with some information on how to do this, or which libraries, if any, to use. I have my send and receive threads below that I am currently using to send and receive images. The use for my program is as a screen-sharing application.

Sending Image:

public void SendSS()
        {
            try
            {


                while (!mainFrm.ssStop)
                {
                    ssTcpClient = new TcpClient();
                    ssTcpClient.Connect(mainFrm.contactIP, 1500);

                    //Set up TCP connection.          
                    if (ssTcpClient.Connected)
                    {
                        //Connected. Capture screen image.
                        labelText("Connected. Now sending desktop to technician.");
                        Image screenShotBMP = GrabScreen();
                        MemoryStream ssmemStream = new MemoryStream();
                        screenShotBMP.Save(ssmemStream, ImageFormat.Jpeg);         
                        NetworkStream ns = ssTcpClient.GetStream();

                        //Convert image to data.
                        byte[] bytesToSend = ssmemStream.GetBuffer();

                        //Store data in stream and send via port.                        
                        ns.Write(bytesToSend, 0, bytesToSend.Length);
                        ns.Flush();

                        //Dispose of image to avoid memory leakage.
                        screenShotBMP.Dispose();
                        ssTcpClient.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "SendSS()", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


Receiving Image:

public void ReceiveSS()
        {
            try
            {

                ssTcpListener = new TcpListener(IPAddress.Any, 1500);
                tcpReceiver = new TcpClient();
                while (!mainFrm.ssStop)
                {
                    //Start listening for connection.
                    //Accept any incoming connection requests on port 1500.
                    ssTcpListener.Start();
                    tcpReceiver = ssTcpListener.AcceptTcpClient();
                    if (tcpReceiver.Connected)
                    {
                        //TCP connected. Receive images from contact.
                        labelText("Connected. Now receiving desktop from client.");
                        NetworkStream receivedNs = new  NetworkStream(tcpReceiver.Client);

                        //Put image into picturebox.
                        Bitmap image = new Bitmap(receivedNs);
                        pboScrnShr.BackgroundImage = image;

                        receivedNs.Flush();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "ReceiveSS()", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


Thanks for your help in advance.
