2008-12-07 7 views
5

Я создаю TCP-сокет, не беспокоясь о номере порта для привязки к [socket.sin_port = 0]. Как позже, если я хочу напечатать номер порта клиента, как мне это сделать? Клиентское приложение C (в Linux) создает множество клиентов, которые подключаются к серверу. Чтобы отлаживать проблемы, я фиксирую трафик на эфире. Я думал о печати номера порта в журналах, в то время как проблема возникает, так что фильтрация на эфире становится легкой.Определение номера порта TCP, к которому клиент привязан

Любая помощь будет оценена по достоинству.

-Prabhu

ответ

10

Используйте getsockname() для получения адреса сокета и порт после успешного соединения.

Редактировать: исправить имя метода. Иногда я не могу копировать простое слово из одного окна в другое!

2

Я считаю, что Darron означал getsockname(). Это то, что вам нужно, если вам нужно определить номер порта на стороне клиента (сторона, вызывающая connect()) программно. На стороне сервера (сторона, вызывающая bind()), вы должны использовать getpeername() для получения той же информации из подключенного сокета.

Однако, если вы отлаживаете и не можете изменить код, вы в конечном итоге используете такие вещи, как netstat или sockstat, в зависимости от операционной системы. Я не уверен, какие утилиты доступны под Linux (или даже ваш конкретный пакет), но я бы начал с man sockstat. Если он установлен, вы можете запустить его с обеих сторон и посмотреть, какие конечные точки были назначены для каких процессов. Объедините это с grep, и вы обычно можете выяснить, какой адрес для фильтрации в Ethereal. Удачи!