【发布时间】:2012-01-05 13:50:33
【问题描述】:
我正在尝试为 Android 设备创建一个简单的多人游戏。我一直在考虑网络代码,现在阅读了很多关于套接字的页面。 Android 应用程序将只是一个客户端,并且只连接到一个服务器。
由于“阻塞”,几乎在任何地方(这里也是)你都会得到使用 NIO 或使用 NIO 的框架的建议。 我试图了解一个简单的套接字实现的问题是什么,所以我创建了一个简单的测试来尝试一下:
我的主要应用:
[...]
Socket clientSocket = new Socket( "127.0.0.1", 2593 );
new Thread(new PacketReader(clientSocket)).start();
PrintStream os = new PrintStream( clientSocket.getOutputStream() );
os.println( "kakapipipopo" );
[...]
PacketReader 线程:
class PacketReader implements Runnable
{
Socket m_Socket;
BufferedReader m_Reader;
PacketReader(Socket socket)
{
m_Reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
public void run()
{
char[] buffer = new char[200];
int count = 0;
while(true)
{
count = m_Reader.read(buffer, 0, 200);
String message = new String(buffer, 0, count);
Gdx.app.log("keks", nachricht);
}
}
}
我无法遇到我应该遇到的阻塞问题。我认为 read() 函数会阻止我的应用程序,我什么也做不了——但一切都很好。 我一直在想:如果我只是在我的应用程序中创建一个输入和输出缓冲区并创建两个线程,它们将从我的两个缓冲区写入和读取套接字怎么办?这行得通吗? 如果是 - 为什么每个人都推荐 NIO?在正常 IO 方式中的某个地方必须发生块,但我找不到它。 使用 NIO 进行 Android 多人游戏还有其他好处吗?我认为 NIO 似乎更复杂,因此可能不太适合移动设备,但可能简单的套接字方式更适合移动设备。
如果有人能告诉我问题出在哪里,我会非常高兴。我不害怕 NIO,但至少我想知道我为什么要使用它 :D
问候
-托马斯
【问题讨论】:
-
我看不出有任何理由在客户端使用 NIO,除非它要连接到数千台服务器。
标签: java android sockets nio multiplayer