Использование WinSocks в C для отправки данных в приложение ac # на той же машине, «целевой хост отказывается от соединения g (часть c #) - PullRequest
2 голосов
/ 01 апреля 2012

Я пытаюсь получить данные из моего интерфейса, написанного на c, в другое приложение на c #.

Теперь я не уверен, что WinSocks - чистый c, но я использую Visual Studioа остальная часть моего интерфейса на 100% чистая C.

Вот мой "клиент", написанный на c #

http://pastebin.com/X9SNcVqn

Вот мой "сервер", написанный наc - зацикливание в ожидании соединения, это создает и запускает без проблем

ПРИМЕЧАНИЕ. DEFAULT_PORT - 18042, используется один и тот же порт для стороны клиента и сервера.

Я скачал wireshark и использовалкоманда "tcp.port eq"

http://pastebin.com/FHZyre2V

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

Я выбрал порт, который не использовался, я попытался использовать wireshark, чтобы увидеть соединения, но не повезло, НО я сканировал портЯ использовал с nmap до и после того, как запустил «сервер», так что он должен быть как минимум создан

Ответы [ 3 ]

1 голос
/ 01 апреля 2012

В вашем коде C # вы смешиваете объекты TcpClient и Socket. Вам не нужны оба, только TcpClient. (Код Socket также использует неправильный порт). Как только объект TcpClient подключен, вызовите метод GetStream, чтобы получить объект NetworkStream, который вы можете читать и записывать, чтобы отправлять и получать данные для процесса сервера.

См. Пример кода в документации, здесь: http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.aspx

0 голосов
/ 01 апреля 2012

Сначала проверьте, правильно ли указан IP-адрес и отображается ли соответствующий порт.

netstat -an | find "port number"

и я думаю, на стороне сервера код

local.sin_port = (unsigned short)DEFAULT_PORT;

Должно быть:

local.sin_port = htons((unsigned short)DEFAULT_PORT);

0 голосов
/ 01 апреля 2012

Ваш код клиента содержит:

IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("192.168.1.4"), 18041);

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

...