Я пытаюсь создать простую многопользовательскую игру для устройств 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?Где-то в нормальном режиме ввода-вывода должен произойти блок, но я не могу его найти.Есть ли другие преимущества использования многопользовательских игр NIO для Android?Я думал, что NIO кажется более сложным, поэтому, возможно, менее подходящим для мобильного устройства, но, возможно, простой способ сокетов хуже для мобильного устройства.проблема случается.Я не боюсь NIO, но, по крайней мере, я хотел бы узнать, почему я его использую: D
Привет
-Thomas