using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; using System.IO; namespace IvyBus { class IvyUDPStreamV3 { Socket socket; StreamReader input; StreamWriter output; byte[] buffer; MemoryStream out_stream; MemoryStream in_stream; /// the protocol version number internal const int PROCOCOLVERSION = 3; public IvyUDPStreamV3(Socket _socket) { socket = _socket; buffer = new byte[4096]; in_stream = new MemoryStream(buffer); input = new StreamReader(in_stream, Encoding.ASCII); out_stream = new MemoryStream(); output = new StreamWriter(out_stream, Encoding.ASCII); } /* * message Syntax: * this is a binary formated message use of network representation * * message Format: protocol_version, TCP server port , lenAppId, appId, lenAppNameId, appName */ internal void receiveMsg(out IPEndPoint remote, out int version, out int port, out string appId, out string appName) { int len; IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0); EndPoint tempRemoteEP = (EndPoint)remoteEP; remoteEP = null; len = socket.ReceiveFrom(buffer, ref tempRemoteEP); remote = (IPEndPoint)tempRemoteEP; in_stream.Position = 0; version = 0; //TODO input.ReadUInt16(); port = 0; //TODO input.ReadUInt16(); int lenAppId = 0; //TODO input.ReadUInt16(); appId = null; //TODO input.ReadChars(lenAppId); int lenAppName = 0; //TODO input.ReadUInt16(); appName = null; //TODO new String(input.ReadChars(lenAppName)); } internal void sendMsg(IPEndPoint EPhost, int port, string appId, string appName) { output.Write((ushort)IPAddress.HostToNetworkOrder((short)(PROCOCOLVERSION))); output.Write((ushort)IPAddress.HostToNetworkOrder((short)port)); output.Write((ushort)IPAddress.HostToNetworkOrder((short)appId.Length)); output.Write(appId.ToCharArray()); output.Write((ushort)IPAddress.HostToNetworkOrder((short)appName.Length)); output.Write(appName.ToCharArray()); output.Flush(); byte[] hellob = out_stream.GetBuffer(); socket.SendTo(hellob, (int)out_stream.Length, 0, EPhost); } internal void Close() { socket.Close(); } } }