mce*_*lik 6 c# unity-game-engine
我有两个不同的可执行文件在同一台运行Windows OS的计算机上运行.它们都是在Unity中构建的.我想在不使用网络的情况下将消息从一个发送到另一个.
如何从exe程序向Unity中的另一个exe程序发送消息?
这是可能的integrated Mono/.net functionality或其他什么?
您可以使用命名管道,它使用共享内存与同一台计算机上的另一个应用程序进行通信.
转到文件 - > 构建设置...选择PC,Mac和Linux单机然后点击播放器设置....现在,将Api兼容级别更改为.NET 2.0.
关闭并重新打开Visual Studio.现在,您可以导入using System.IO.Pipes;并能够使用NamedPipeServerStream和NamedPipeClientStream.
下面是一个非常简化的服务器和客户端.您必须在a中执行此操作,Thread并且还应处理异常.
如果您不想使用Thread,还有异步参数(PipeOptions.Asynchronous)使其成为非阻塞运算符.它从那里变得复杂,你必须在MS doc上寻找一些例子.
简单服务器:
//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();
Run Code Online (Sandbox Code Playgroud)
简单客户:
//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();
Run Code Online (Sandbox Code Playgroud)
StreamString来自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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3510 次 |
| 最近记录: |