Saya mencoba menerapkan pemrograman socket di C. Ketika saya mencoba untuk terhubung dari klien ke server (Ubuntu), itu menunjukkan kesalahan seperti "koneksi gagal".
Jadi saya pikir masalahnya ada pada port. Saya menggunakan port 5454 / tcp untuk pemrograman socket.
Bagaimana saya bisa tahu jika port 5454 sedang mendengarkan atau tidak? Jika tidak, maka port mana yang dapat saya gunakan untuk pemrograman soket TCP menggunakan C di Ubuntu? Apakah itu masalah dengan port saja atau ada sesuatu yang salah dalam kode saya atau pengaturan apa pun diperlukan di LINUX Ubuntu?
EDIT: Potongan kode:
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 : Masalahnya ada di port, jadi saya baru saja menginstal ulang Ubuntu, dan itu berfungsi. Terima kasih semuanya.
lsof -i:5454
(Anda mungkin perlu menjalankannya sebagai pengguna yang sama dengan program yang membuka port, atau sebagai root).Jawaban:
Karena Anda memprogram dalam CI berpikir untuk memposting potongan kecil yang menunjukkan kepada Anda apakah port terbuka atau tidak, saya telah memprogram untuk menampilkan sebuah string. Anda dapat dengan mudah mengubahnya agar sesuai dengan kebutuhan Anda.
Jawab pertanyaan kedua Anda, seperti yang dikatakan semua orang di sini, Anda bisa menggunakan port apa saja jika Anda adalah pengguna super (root) pada sistem jika port tersebut tidak digunakan oleh aplikasi lain. Jika Anda bukan root, maka Anda dapat membuka port apa pun di atas 1024.
sumber
SOCK_CLOEXEC
untuksocket()
panggilan.Ada beberapa cara, yang paling umum mungkin adalah:
Anda dapat, tentu saja,
grep
untuk ekspresi (reguler) lainnya.Jika Anda menggunakan mesin yang berbeda (klien dan server), Anda perlu memeriksa
iptables
juga.Anda bisa menggunakan port apa saja yang saat ini tidak digunakan untuk program Anda. Namun, periksa
/etc/services
untuk port yang dikenal dan dicadangkan.sumber
Periksa tautan ( http://wi-fizzle.com/article/458 ) apakah port TCP terbuka atau tidak
sumber
Gunakan perintah:
nmap 192.168.56.101
Ini akan menghasilkan jumlah port terbuka pada mesin itu bersama dengan nama layanan
sumber
nmap
untuk ini berdetak sekitar semak IMHO. Untuk memeriksa satu port yang harus Anda gunakannmap -p5454 192.168.56.101
.Alat terbaik untuk mencoba menentukan apakah suatu proses terikat ke port TCP
netstat
. Anda dapat menjalankannya seperti itu untuk mendapatkan daftar nama proses yang terikat, jika ada, serta koneksi apa pun ke port, serta statusnya.Contoh
Di atas menunjukkan port yang dibuka secara lokal di kolom ke-3 dan port jarak jauh yang kami bersedia menerima koneksi, seperti dengan 2 baris ini:
2 baris ini menunjukkan bahwa kita mendengarkan pada port 22, (sshd) dan bersedia menerima koneksi dari antarmuka apa pun yang kita miliki (yaitu kartu jaringan, ethernet, atau nirkabel). Saat ini tidak ada koneksi ke port ini.
Baris ke-2 menunjukkan bahwa kita menjalankan server CUPS (untuk mencetak) pada port 631, dan kita hanya dapat terhubung melalui antarmuka localhost (127.0.0.1).
Lebih jauh ke bawah kita memiliki 2 baris ini:
Yang menunjukkan bahwa kami sedang mengakses situs web di alamat IP 198.252.206.25. Kami tahu ini situs web karena kami mengakses server ini melalui port 80 (HTTP). Juga jika kita mencari alamat IP kita menemukan ini:
sumber