Я пытаюсь реализовать программирование сокетов на C. Когда я пытаюсь подключиться от клиента к серверу (Ubuntu), появляется сообщение об ошибке типа «ошибка подключения».
Поэтому я думаю, что проблема с портом. Я использую порт 5454 / TCP для программирования сокетов.
Как я могу узнать, прослушивает порт 5454 или нет? Если это не так, то какие порты я могу использовать для программирования сокетов TCP с помощью C в Ubuntu? Это проблема только с портом или в моем коде что-то не так или в LINUX Ubuntu требуются какие-либо настройки?
РЕДАКТИРОВАТЬ: фрагмент кода:
int socket_send;
struct sockaddr_in address;
printf("\n Initialization Socket....");
socket_send = socket(AF_INET,SOCK_STREAM,0);
if(socket_send == -1)
{
perror("\n Socket not created.Error:");
return 1;
}
printf("\n Socket created");
address.sin_family=AF_INET;
address.sin_addr.s_addr=inet_addr(ip);
address.sin_port=htons(5454);
if(connect(socket_send,(struct sockaddr*)&address,sizeof(struct sockaddr))<0)
{
perror("\nConnetion failed.Error:");
return 1;
}
printf("\n Connected");
if(send(socket_send,(char*)buffer,size,flag)<0)
{
perror("\nSending failed.Error:");
return 1;
}
printf("\n Data successfully sent");
close(socket_send);
РЕДАКТИРОВАТЬ : проблема в порту, поэтому я просто переустановил Ubuntu, и он работает. Спасибо вам всем.
lsof -i:5454
(вам может потребоваться выполнить его от имени того же пользователя, что и программа, открывающая порт, или от имени пользователя root).Ответы:
Поскольку вы программируете на CI, подумав о публикации небольшого фрагмента, который показывает вам, открыт порт или нет, я запрограммировал вывод строки. Вы можете легко изменить его в соответствии с вашими потребностями.
Ответьте на свой второй вопрос, как все здесь сказали, вы можете в значительной степени использовать любой порт, если вы являетесь суперпользователем (root) в системе, если порт не используется каким-либо другим приложением. Если вы не являетесь пользователем root, вы можете открыть любой порт выше 1024.
источник
SOCK_CLOEXEC
этотsocket()
вызов.Есть несколько способов, наиболее распространенным из которых является:
Можно, конечно,
grep
для другого (регулярного) выражения.Если вы используете разные машины (клиент и сервер), вам также необходимо проверить
iptables
.Вы можете в значительной степени использовать любой порт, который в настоящее время не используется для ваших программ. Проверьте, однако,
/etc/services
для известных и зарезервированных портов.источник
Проверьте ссылку ( http://wi-fizzle.com/article/458 ) для порта TCP открыт или нет
источник
Используйте команду:
nmap 192.168.56.101
Это приведет к числу открытых портов на этой машине вместе с названием служб
источник
nmap
для этого, бить вокруг куста ИМХО. Чтобы проверить один порт, вы должны использоватьnmap -p5454 192.168.56.101
.Лучшим инструментом для определения того, связан ли процесс с портом TCP, является
netstat
. Вы можете запустить его так, чтобы получить список имен связанных процессов, если таковые имеются, а также любых подключений к порту, а также их состояния.пример
Выше показаны локально открытые порты в 3-м столбце и удаленные порты, к которым мы готовы принимать подключения, например, с этими 2 линиями:
Эти две строки показывают, что мы прослушиваем порт 22 (sshd) и готовы принимать подключения с любого имеющегося у нас интерфейса (т. Е. С любой сетевой карты, Ethernet или беспроводной сети). В настоящее время нет подключений к этому порту.
Во второй строке показано, что на сервере 631 запущен сервер CUPS (для печати), и мы можем подключиться к нему только через интерфейс localhost (127.0.0.1).
Далее у нас есть эти 2 строки:
Который показывает, что мы заходим на веб-сайт с IP-адресом 198.252.206.25. Мы знаем, что это веб-сайт, потому что мы обращаемся к этому серверу через порт 80 (HTTP). Также, если мы посмотрим на IP-адрес, мы найдем это:
источник