сокет для обмена сообщениями между пользовательским интерфейсом и кодом C?

1

Я реализовал библиотеку C и хотел бы продемонстрировать ее функциональность для пользовательского интерфейса. Пользовательский интерфейс будет либо интерфейсом Windows Forms, либо интерфейсом WPF.

Чтобы придумать более "независимый от платформы" способ связывания UI и C lib вместе, я подумал о создании сокета на стороне интерфейса, а также на стороне C. Сокет будет использоваться для обмена двунаправленными сообщениями между пользовательским интерфейсом и библиотекой. Я знаю, что могут быть некоторые накладные расходы, чтобы сделать это таким образом, но "трафик сообщений" между пользовательским интерфейсом и кодом C не будет тяжелым.

Другая причина для этого заключается в том, что я читал, что есть много ошибок, о которых вы должны знать, когда используете PInvoke, IJW, COM или CLI (для включения вызовов С# -to-C и C-to -С#). Этот сокет-подход делает его более чистым, и я буду лучше контролировать, что происходит, когда код С# отправляет сообщение в код C (или наоборот).

Чтобы начать работу и чтобы не тратить время, я ищу советы от опытных разработчиков, которые много знают о кодах сокетов.

Я не уверен, что должны быть требования для кода сокета с обеих сторон? Я знаю, что хочу, чтобы какой-либо компонент на стороне пользовательского интерфейса мог отправлять и отвечать на сообщения.

Изображение 174551

  • 0
    Вы подразумеваете под «сокеты»: сетевые сокеты? Может быть, вы можете использовать именованные каналы. Именованные каналы могут быть созданы на стороне C ++ и на стороне C #. На стороне C # у вас есть NamedPipeServerStream и NamedPipClientStream . Вы получаете к ним доступ через интерфейс Stream .
  • 0
    Это звучит почти так, как должно быть на Programmers.SE .
Показать ещё 14 комментариев
Теги:
wpf
winforms
sockets

2 ответа

0

Пожалуйста, прочитайте эту тему, это может помочь вам решить, в какую сторону перейти Interprocess Communications

0

Использование сокетов потребует от вашей программы c стать сервером, который открывает сокет и прослушивает. Получив запрос, он делает некоторые вещи и обычно возвращает ответ. Идея - это общение между сетевыми компьютерами.

вот основной пример. http://www.linuxhowtos.org/C_C++/socket.htm

Для написания кода сокета требуются совместимые форматы данных между отправляющим приложением и получающим приложением. Это означает, что вам необходимо тщательно структурировать свои сообщения и гарантировать, что каждая целая, длинная целая, плавающая, двойная и фиксированная длина строки точно совпадают. Дополнительный байт с 1 стороны будет сжимать ваше сообщение в мусор. Если ваши форматы кодирования данных c и С# не совпадают - у вас будет дополнительная работа по декодированию/форматированию.

Я предпочел использовать ONC-RPC для написания кода клиентского сервера между неравными системами. Десять лет назад я использовал RPC для подключения большой endian Solaris к маленькой системной системе VMS - она работала безупречно, это было очень быстро написать.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню