Pertanyaan Program socket C sebagai server web untuk berjalan di cloud, tidak menerima respon apa pun dari browser


Saya mencoba mengembangkan program web server menggunakan C ++ yang seharusnya berjalan di mesin cloud menjalankan mesin amazon. Saya menulis kode di C, tetapi tidak akan menerima tanggapan apa pun dari browser web ketika alamat IP dan nomor port dimasukkan di bilah alamat. Namun, ia menerima tanggapan dari localhost. Ini kode sumber saya:

#include<stdio.h>
#include<string.h>  
#include<sys/socket.h>
#include<arpa/inet.h> 
#include<unistd.h>

int main(int argc , char *argv[])
{
int socket_desc , new_socket , c;
struct sockaddr_in server , client;
char *message;

//Create socket
socket_desc = socket(AF_INET , SOCK_STREAM , 0);
if (socket_desc == -1)
{
    printf("Could not create socket");
}


server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons( 8080 );

//Bind
if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
{
    puts("bind failed");
    return 1;
}
puts("bind done");

listen(socket_desc , 3);

puts("Waiting for incoming connections...");
c = sizeof(struct sockaddr_in);
while( (new_socket = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c)) )
{
    puts("Connection accepted");

    //Reply to the client
    message = "Hello Client , I have received your connection. But I have to go now, bye\n";
    write(new_socket , message , strlen(message));
}

if (new_socket<0)
{
    perror("accept failed");
    return 1;
}

return 0;
}

Apakah ada masalah logis dalam kode sumber saya?


4
2017-07-21 15:56


asal


Jawaban:


Hanya menguji kode Anda pada mesin CentOS 6.4. Itu berhasil ... Saya telah "Koneksi Diterima" dari

"http://localhost:8080" 

dan dari komputer lain di jaringan, saya masuk

"http://192.168.2.22:8080" 

dan mendapat "Koneksi Diterima" di konsol Linux. Juga, baik alamat IP dan "localhost" bekerja dari mesin yang menjalankan program. Saya cukup yakin itu masalah jaringan.

Tapi cobalah mengubah kode Anda sedikit hanya untuk itu ...

Coba ini:

perubahan:

socket_desc = socket(AF_INET , SOCK_STREAM , 0);

untuk:

socket_desc = socket(AF_INET , SOCK_STREAM , IPPROTO_TCP);

menambahkan:

close(new_socket);

setelah:

write(new_socket , message , strlen(message));

dan sekali lagi, untuk itu ... menambahkan:

memset(&server, 0, sizeof(server));

sebelum Anda menggunakan struct server Anda.


0
2017-08-05 06:57