geschrieben wurde Sie Named Pipes verwenden können die gemeinsam genutzten Speicher verwendet, um mit einer anderen Anwendung auf die-gleiche Maschine zu kommunizieren.
Zum Datei ->Build-Einstellungen ... wählen PC, Mac & Linux Standalone dann auf Player-Einstellungen .... Ändern Sie jetzt Api-Kompatibilitätsstufe zu .NET 2.0.
Schließen Sie Visual Studio und öffnen Sie es erneut. Jetzt können Sie using System.IO.Pipes;
importieren und NamedPipeServerStream
und verwenden können.
Unten ist ein sehr vereinfacht Server und Client. Sie müssen tun, dass in einem Thread
und sollte auch Ausnahme behandeln.
Wenn Sie nicht Thread
verwenden möchten, gibt es auch einen asynchronen Parameter(), der es zu einem nicht blockierenden Operator macht. Es wird kompliziert von dort und Sie müssen dafür einige Beispiele für MS Doc suchen.
Simple Server:
//Create Server Instance
NamedPipeServerStream server = new NamedPipeServerStream("MyCOMApp", PipeDirection.InOut, 1);
//Wait for a client to connect
server.WaitForConnection();
//Created stream for reading and writing
StreamString serverStream = new StreamString(server);
//Send Message to Client
serverStream.WriteString("Hello From Server");
//Read from Client
string dataFromClient = serverStream.ReadString();
UnityEngine.Debug.Log("Received from Client: " + dataFromClient);
//Close Connection
server.Close();
Simple Client:
//Create Client Instance
NamedPipeClientStream client = new NamedPipeClientStream(".", "MyCOMApp",
PipeDirection.InOut, PipeOptions.None,
TokenImpersonationLevel.Impersonation);
//Connect to server
client.Connect();
//Created stream for reading and writing
StreamString clientStream = new StreamString(client);
//Read from Server
string dataFromServer = clientStream.ReadString();
UnityEngine.Debug.Log("Received from Server: " + dataFromServer);
//Send Message to Server
clientStream.WriteString("Bye from client");
//Close client
client.Close();
Die StreamString
Klasse von MS Doc:
public class StreamString
{
private Stream ioStream;
private UnicodeEncoding streamEncoding;
public StreamString(Stream ioStream)
{
this.ioStream = ioStream;
streamEncoding = new UnicodeEncoding();
}
public string ReadString()
{
int len = 0;
len = ioStream.ReadByte() * 256;
len += ioStream.ReadByte();
byte[] inBuffer = new byte[len];
ioStream.Read(inBuffer, 0, len);
return streamEncoding.GetString(inBuffer);
}
public int WriteString(string outString)
{
byte[] outBuffer = streamEncoding.GetBytes(outString);
int len = outBuffer.Length;
if (len > UInt16.MaxValue)
{
len = (int)UInt16.MaxValue;
}
ioStream.WriteByte((byte)(len/256));
ioStream.WriteByte((byte)(len & 255));
ioStream.Write(outBuffer, 0, len);
ioStream.Flush();
return outBuffer.Length + 2;
}
}
Ramdisk ist schnell –