我在Android设备上通过视频游戏环境(Unity,基本上是C#库)运行应用程序。我希望这个应用程序响应来自我的PC的命令(最好是运行Windows 8,但可以是Linux:Ubuntu,如果更容易)。设备和PC位于同一LAN上,但未通过物理电缆连接。我需要设备在发出命令后的0.5秒内响应来自PC的命令。
问题:在我的电脑和设备之间建立这种连接的最简单(概念和实际)方法是什么?
示例场景:我在Android手机上运行游戏,蜘蛛在屏幕上爬行。当我在电脑上打空间时,我希望所有的蜘蛛都被打掉。
当前的解决方案:创建一个ruby-on-rails网站&数据库。在PC上输入命令时,将使用该命令更新数据库。设备每隔0.5秒检查数据库上的时间戳并提取任何新命令。这个解决方案是次优的,因为我不知道ruby(我愿意学习它,但我想要一个更简单的解决方案)。
我应该使用C#套接字吗?
我会喜欢一些简单的代码,例如,我会在我的PC和设备之间建立直接连接,这将允许我发送字节流(例如,我的PC可以发送字符串“空格键被按下”)。
我对网络非常缺乏教育,并且会赞赏简单的解释。
答案 0 :(得分:2)
与pc和mobile通信的最佳方式是一个简单的套接字。 在特定端口号的一侧创建服务器套接字,并从另一端连接。 它非常快(甚至不到0.1秒)
示例:强>
服务器(移动端)
angular
.module('app', [])
.factory('Calculator', function () {
return function () {
return Math.random();
}
});`
和客户端(PC - C#)
public class Provider{
ServerSocket providerSocket;
Socket connection = null;
ObjectOutputStream out;
ObjectInputStream in;
String message;
Provider(){}
void run()
{
try{
//1. creating a server socket
providerSocket = new ServerSocket(2004, 10);
//2. Wait for connection
System.out.println("Waiting for connection");
connection = providerSocket.accept();
System.out.println("Connection received from " + connection.getInetAddress().getHostName());
//3. get Input and Output streams
out = new ObjectOutputStream(connection.getOutputStream());
out.flush();
in = new ObjectInputStream(connection.getInputStream());
sendMessage("Connection successful");
//4. The two parts communicate via the input and output streams
do{
try{
message = (String)in.readObject();
System.out.println("client>" + message);
if (message.equals("bye"))
sendMessage("bye");
}
catch(ClassNotFoundException classnot){
System.err.println("Data received in unknown format");
}
}while(!message.equals("bye"));
}
catch(IOException ioException){
ioException.printStackTrace();
}
finally{
//4: Closing connection
try{
in.close();
out.close();
providerSocket.close();
}
catch(IOException ioException){
ioException.printStackTrace();
}
}
}
void sendMessage(String msg)
{
try{
out.writeObject(msg);
out.flush();
System.out.println("server>" + msg);
}
catch(IOException ioException){
ioException.printStackTrace();
}
}
public static void main(String args[])
{
Provider server = new Provider();
while(true){
server.run();
}
}
}