   Data from C# does not seem to arrive.
  I am completely new to C# programming but I have decent skills in C++/Java etc.Recently I been trying to get my MMO project working with Unity3d.On my server I print debug output in raw binary as soon as data arrives, when sending stuff from my C++ client I see the debug info displayed correctly, however data sent from Unity3d nothing does not seem to arrive.I notice that the socket connection from Unity3d works, the server prints a message when a new connection is established. Since the connection is successful the problem is not the firewall (I tried to disable that as well to be sure).I keep track of number sent bytes and error messages, everything seems OK.For example after connecting and send pressing the "Account Login" button the integer totalSent is 17, which is correct:2 byte header1 byte msg id5 byte string length + string (4 + "Name") a9 byte string length + string (8 + "Password")Here is my Unity3d that display soms buttons and handles the connection. I have been following the C# non blocking socket tutorial at http://blog.bee-eee.com/2008/09/15/c-non-blocking-sockets/.using UnityEngine;using System.Collections;using System;using System.Net;using System.Net.Sockets;public class NextGenConnection : MonoBehaviour {public int totalUpdates;public int totalReceived;public int totalSent;public  bool connected;Socket client;private const int BUFFER_SIZE = 1024;private const int HEADER_SIZE = 2;private byte[] data = new byte[BUFFER_SIZE];private byte[] header = new byte[HEADER_SIZE];// Put these in an seperate header fileprivate const int ACCOUNT_LOGIN = 2;private const int CHAR_LOGIN = 5;private const int ACCOUNT_LOGIN_SUCCESS = 3;private const int ACCOUNT_LOGIN_FAIL = 4;private const int CHAR_LOGIN_SUCCESS = 6;private const int CHAR_LOGIN_FAIL = 7;public int recv;public SocketError err;// Putting GUI stuff here is not pretty, fix later.Rect windowRect = new Rect(20, 20, 120, 120);void Start () {connected = false;}    void Connect() {client = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp );try {Debug.Log("Connecting to server.next-gen.cc");client.Connect("server.next-gen.cc", 2000);} catch (SocketException) {Debug.Log("Connection Failure");return;}Debug.Log("Connections success");// This must be set after Connect().client.Blocking = false;connected = true;totalReceived = 0;}  // Update is called once per framevoid Update () {int test = Read();if(test < 0)Debug.Log("Got server data");totalUpdates += 1;    }int Read() {if(!connected)return 0;int bytesRead=0;SocketError err;bytesRead = client.Receive(header, 0, HEADER_SIZE, SocketFlags.None, out err);totalReceived += bytesRead;if(err != SocketError.WouldBlock)return 0;short dataSize = (short)(header[0] | (header[1] >> 8));totalReceived += client.Receive(data, 0, (int) dataSize, SocketFlags.None, out err);return bytesRead;}void Send(int msgId, String arg1, string arg2) {SocketError err = SocketError.WouldBlock;byte[] Id = new byte[1];byte[] header = new byte[2];header =  System.BitConverter.GetBytes((short) 17);Id = System.BitConverter.GetBytes((char) msgId);while (err == SocketError.WouldBlock) {totalSent += client.Send(header, 0, 2, SocketFlags.None, out err);Debug.Log("Sent header!");totalSent += client.Send(Id, 0, 1, SocketFlags.None, out err);Debug.Log("Sent message Id!");byte[] test1 = makeString(arg1);totalSent += client.Send(test1, 0, arg1.Length + 1, SocketFlags.None, out err);Debug.Log("Sent message arg1" + arg1);byte[] test2 = makeString(arg2);totalSent += client.Send(test2, 0, arg2.Length + 1, SocketFlags.None, out err);Debug.Log("Sent message arg2" + arg2);}if (err != SocketError.Success ) {Debug.Log("Send error!");return;}if (err == SocketError.Success) {Debug.Log("Sent was successful");}}byte[] makeString(String str) {int strLen = str.Length;Debug.Log("str.Length = " + strLen.ToString());byte[] strHeader = System.BitConverter.GetBytes((char) strLen);byte[] payload = System.Text.Encoding.ASCII.GetBytes(str);byte [] concat = new byte [strHeader.Length + payload.Length];System.Buffer.BlockCopy(strHeader, 0, concat, 0, strHeader.Length);System.Buffer.BlockCopy(payload, 0, concat, strHeader.Length, payload.Length);return concat;}void OnGUI() {windowRect = GUI.Window(0, windowRect, DoMyWindow, "My Window"); }void DoMyWindow(int windowID)   {if(GUI.Button(new Rect(10,20,100,20), "Connection"))Connect();if(GUI.Button(new Rect(10,42,100,20), "Account Login"))Send(ACCOUNT_LOGIN, "Name", "Password");if(GUI.Button(new Rect(10,64,100,20), "Char Login"))Send(CHAR_LOGIN, "", "");   } }[Edited by - flodihn on July 11, 2010 4:37:38 PM]
  While brushing my teeths I figured out I do multiple socket.Send(), that is probably the fault.;  I noticed my arrays have the same size, for example my byte header should be size 1 not 2.One of my problems is BlockCopy one byte, C# does not allow just a byte to be sent, it wants a byte[], any ideas?