Estou tentando implementar a programação de soquetes no C. Quando tento conectar-me de um cliente a um servidor (Ubuntu), ele mostra um erro como "falha na conexão".
Então eu acho que o problema está com a porta. Estou usando a porta 5454 / tcp para programação de soquete.
Como posso saber se a porta 5454 está escutando ou não? Caso contrário, quais são as portas que eu posso usar para programação de soquete TCP usando C no Ubuntu? Esse é o problema apenas da porta ou há algo errado no meu código ou qualquer configuração é necessária no Linux Linux?
EDIT: Fragmento de código:
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);
EDIT : O problema está na porta, então eu apenas reinstalei o Ubuntu e está funcionando. Obrigado, todos vocês.
lsof -i:5454
(talvez seja necessário executá-lo como o mesmo usuário que o programa que abre a porta ou como root).Respostas:
Como você está programando no CI, pensou em postar um pequeno trecho que mostra se a porta está aberta ou não, eu programei para gerar uma string. Você pode alterá-lo facilmente para atender às suas necessidades.
Responda à sua segunda pergunta, como todos disseram aqui, você pode usar praticamente qualquer porta se for o superusuário (root) no sistema se a porta não for usada por nenhum outro aplicativo. Se você não for o root, poderá abrir qualquer porta acima de 1024.
fonte
SOCK_CLOEXEC
asocket()
chamada.Existem várias maneiras, sendo as mais comuns:
Você pode, é claro,
grep
obter outra expressão (regular).Se você estiver usando máquinas diferentes (cliente e servidor), precisará verificar
iptables
também.Você pode usar praticamente qualquer porta que não esteja sendo usada atualmente para seus programas. Verifique, no entanto, as
/etc/services
portas conhecidas e reservadas.fonte
Verifique o link ( http://wi-fizzle.com/article/458 ) para ver se a porta TCP está aberta ou não.
fonte
Use o comando:
nmap 192.168.56.101
Isso resultará no número de portas abertas nessa máquina, juntamente com o nome dos serviços
fonte
nmap
para isso está batendo em torno do arbusto IMHO. Para verificar uma única porta, você deve usarnmap -p5454 192.168.56.101
.A melhor ferramenta para tentar determinar se um processo está associado a uma porta TCP é
netstat
. Você pode executá-lo assim para obter uma lista do nome do processo que está vinculado, se houver, bem como das conexões com a porta, bem como seu estado.Exemplo
A tabela acima mostra as portas abertas localmente na terceira coluna e as portas remotas às quais estamos dispostos a aceitar conexões, como com estas duas linhas:
Essas duas linhas mostram que estamos ouvindo na porta 22 (sshd) e estamos dispostos a aceitar conexões de qualquer interface que tenhamos (ou seja, qualquer placa de rede, Ethernet ou sem fio). Atualmente não há conexões com esta porta.
A segunda linha mostra que estávamos executando o servidor CUPS (para impressão) na porta 631, e só podemos conectar a ele através da interface localhost (127.0.0.1).
Mais abaixo, temos estas 2 linhas:
Que mostram que estamos acessando um site no endereço IP 198.252.206.25. Sabemos que é um site, porque estamos acessando este servidor pela porta 80 (HTTP). Além disso, se procurarmos o endereço IP, encontramos o seguinte:
fonte