2012-02-12 7 views
2

Я очень запутался в синхронном и асинхронном сокетах на C#, я хочу развить игру в сети LAN, но я путаю, какой из них лучше для моего приложения Hangman.Асинхронный/синхронный и TCP или UDP

В этой игре можно играть в режиме 1player или в режиме 2 игроков.

В 1 режиме плеера только игрок взаимодействует с серер

Но 2 игроков режиме 2 игроков взаимодействуют с сервером на поворотное основание. Это означает, что, если игрок догадывается о неправильном слове, он проигрывает свою очередь, а игрок B принимает этот ход.

Можете ли вы дать мне предложение о синхронности и асинхронности.

Кроме того, как клиент может найти сервер, если клиент не должен вводить сервер ip? это означает, что я должен выбирать между TCP и UDP

и последний вопрос: могу ли я создать сервер асинхронный, но клиенты синхронны, не так ли?

Спасибо Очень

+0

Как игра с двумя игроками пошаговая, вы хотели бы использовать синхронные вызовы. – Shai

+0

Вы хотите использовать асинхронные вызовы, поскольку синхронные вызовы блокируют ваш основной поток. Тот факт, что ваша игра пошаговая, не имеет значения. – twilson

+0

Просто потому, что синхронные вызовы блокируют поток, нет необходимости использовать сокет из основного потока. Использование синхронных вызовов из фонового потока является опцией. –

ответ

1

Важной частью о выборе асинхронный или синхронный, как вы делаете коммуникации взаимодействовать с GUI потоком. Не позволяйте синхронному сокету блокировать ваш пользовательский интерфейс. Я вижу, что статья здесь дает представление о том, чего ожидать и дает некоторые рекомендации по использованию асинхронного программирования с Windows.

Ваш второй вопрос о TCP/UDP имеет много разницы между этими двумя, о которых вы должны знать. В первую очередь, TCP гарантирует гарантированную доставку пакетов, пока соединение действительно. Учитывая вашу ситуацию и простые требования и недостаток производительности. TCP, вероятно, ваш лучший выбор. Если вы разрабатываете высокопроизводительную игру, в которой вам лучше разрешить отбрасываемые пакеты и латентность, UDP становится лучшим вариантом, но тогда вы должны учитывать, что происходит, когда вы отбрасываете пакеты и получаете такие вещи, как пакеты «Не на заказ». TCP скрывает от вас всю эту сложность и упростит работу с ней.

Смешение синхронного и асинхронного клиента/сервера не должно вызывать проблем. Они знают только о самой линии связи (TCP/UDP).

1

так относительно ваших вопросов:

Может ли вы дать мне предложить о Synchornous и асинхронном: В вашем случае, учитывая сложность приложения, которое вы можете использовать либо синхронизацию или асинхронную розетку, а twilson изложили синхронизации сокетов блоков вашего главные нить, в то время как асинхронные не работают, если у вас есть проблемы с производительностью для асинхронных сокетов

Кроме того, как клиент может найти сервер, если клиент не нуждается в установке сервера ip? это означает, что я должен выбирать между TCP и UDP: хорошо ли существует различие между TCP и UDP-соединениями, вы обычно используете UDP (без установления соединения), когда у вас есть проблемы с выпуском, такие как приложения Voip, игры в реальном времени, видеочат и т. д., в то время как в В других случаях вы используете TCP, поэтому в вашем случае TCP вам подойдет.

и последний вопрос: могу ли я создать сервер асинхронный, но клиенты синхронны, не так ли? Да, вы можете использовать этот вид реализации, даже если хорошая практика заключается в том, чтобы иметь одинаковый тип сокета как на обоих клиентах, так и на сервере.

Смежные вопросы