2011-02-09 5 views
1

Я изучаю перенос приложения .NET C# из Windows в Linux с помощью Mono. Проблема, с которой я столкнулся, заключается в том, что асинхронные вызовы сокетов TCP не работают. Это означает, что я могу отправлять данные без каких-либо проблем, но я только могу получить самый первый ответ сокета (через Socket.BeginReceive()). Следующий BeginReceive() помещает поток в состояние ожидания.Асинхронные вызовы сокетов не работают в Mono/Linux

В принципе, наш код сокета содержит ошибку, но поскольку он работает безупречно в Windows в течение многих лет.

Спасибо

+0

Не могли бы вы предоставить небольшую автономную программу, которая дублирует вашу проблему? –

+0

Конечно, я сейчас воспроизвел проблему именно в такой программе. Конечно, он по-прежнему использует наш сервер, который будет недоступен вам. Однако протокол очень прост, как вы увидите. – alexk

+0

Извините, до сих пор не могу освоить этот сайт :-(Ссылка на программу http://www.sendspace.com/file/ptmwyy – alexk

ответ

0

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

+0

Только что протестировали синхронный сокет. , единственное различие заключается в том, что последние два полученных фрагмента (53 и 12 байт) принимаются как один (65 байтов). – alexk

+0

Пробовал также небольшой автономный сервер, позже отправит код. Не работает ни в Linux, только два первых сообщения приходят. Таким образом, это, надеюсь, может быть воспроизведено на любой машине. – alexk

+0

Я подготовил автономный серверный и клиентский коды, воспроизводящие проблему. Вот ссылка на файлы: http://www.sendspace.com/ файл/a64q05. Когда он встроен в MS Visual Studio 2008 и запускается в Windows 7, он создает последовательность из 5 пар сообщений (клиент <->). При работе в Ubuntu 10.10 под Mono (одни и те же бинарные файлы MS или встроенные заново b y Mono), он производит только 2 сообщения от клиента и 1 сообщение от сервера. Также обратите внимание, что я запускаю Ubuntu в качестве гостя в VirtualBox в Windows 7, если это имеет значение. – alexk

1

Это прекрасно работает с моно-2-10 веткой (скоро будет выпущено как Mono 2.10) и мастером.

Mono 2.6.7 поставляется с ubuntu, а также Mono 2.8. Я нашел проблему, и я тестирую исправление. . В следующих выпусках серии 2.6.x будет исправлено (также 2.8.x, если они есть, так как мы переходим к 2.10 через несколько дней).

Btw, вам следует сообщить о проблемах в Моно после http://mono-project.com/Bugs, а не здесь.

+0

Я подтверждаю, что ошибка исправлена ​​(по крайней мере, в моно 2.10), спасибо. Я проверил это вчера для отдельного проекта, однако потребовалось время, чтобы проверить оригинальный (более крупный) проект. – alexk

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