2013-12-19 4 views
-1

Я начинаю программировать в сети, и у меня есть проект, в котором я должен создать системный проводник. Это означает, что у меня будет возможность написать http-запрос с каталогом в браузере, и если соединение с сервером будет успешным, откроются файлы из вышеуказанного каталога.соединение с сервером с сервером в c

int main(int argc, char** argv) 
{ 
typedef struct tcpip_connection 
{ 
int connfd;   
struct sockaddr_in peer_addr; 
} tcpip_connection; 


int s_socket, *fd, port; 
char buffer[256]; 
struct sockaddr_in lis_addr; 
struct sockaddr_in peer_addr; 
int sopt = 1, n; 


s_socket=socket(AF_INET, SOCK_STREAM, 0); 

if(s_socket<0){ 
printf("error: the socket was not created!"); 
} 

if(setsockopt(s_socket , SOL_SOCKET, SO_REUSEADDR, &sopt, sizeof(sopt))){ 
printf("Setsokopt error!"); 
} 

memset(&lis_addr, 0, sizeof(lis_addr)); 
lis_addr.sin_family = AF_INET; 
lis_addr.sin_addr.s_addr = htonl(INADDR_ANY); 
lis_addr.sin_port = htons(port); 


if (bind(s_socket, (struct sockaddr*) &lis_addr, sizeof(lis_addr)) < 0){    
    perror(NULL);        
    exit(-1); 
} 

if(listen(s_socket,15)<0){  
perror("server.listen"); 
} 

socklen_t peer_addrlen; 


while(1){ 

if((fd = malloc(sizeof(int))) == NULL){ 
fprintf(stderr, "Out of memory\n"); 
abort(); 
} 
*fd=accept(s_socket, (struct sockaddr*)&peer_addr,&peer_addrlen); 

if(fd<0){ 
if(errno==EINTR   /* Call interrupted by signal */ 
|| errno==ECONNABORTED /* connection was aborted */ 
|| errno==EMFILE  /* per-process limit of open fds */ 
|| errno==ENFILE  /* system-wide limit of open fds */ 
|| errno==ENOBUFS  /* no space for socket buffers */ 
|| errno==ENOMEM  /* no space for socket buffers */ 
|| errno==EPERM /* Firewall blocked the connection */ 
) 
continue; 

} 

} 

if(errno == EBADF) 
break;   /* return, the server_socket is closed */ 
} 

bzero(buffer,1024); 
n = read(*fd,buffer,1023); 
if (n < 0) 
{ 
perror("ERROR reading from socket"); 
exit(1); 
} 
printf("Here is the message: %s\n",buffer); 


/* Write a response to the client 

n = write(*fd,"I got your message",18); 
if (n < 0) 
{ 
perror("ERROR writing to socket"); 
exit(1); 
} 
return 0;*/ 



} 

Я не знаю, если есть что-то случилось с моим кодом, но главная проблема в том, что я не знаю, как сделать браузер соединится с сервером. Есть ли что-нибудь, что мне нужно написать в браузере, или мне нужно добавить дополнительный код?

ответ

0

Вы забыли инициализировать переменную порта. Попробуйте установить port = 8080 перед вызовом bind и прослушивания.

Затем в вашем браузере перейдите по ссылке http://localhost:8080/, и он должен подключиться.

+0

Я сделал это, и он все еще не работает. Только инициализируя порт, у меня будет возможность подключиться? Я имею в виду, что это так просто, потому что я думал, что мне будет гораздо труднее. – user3121051

+0

Вы уже сделали больше всего необходимого (хотя я не запускал ваш код, он не компилировался, может быть, из-за проблем с копированием и вставкой), но при запуске сервера: создать сокет, привязать его к адресу (порт здесь очень важен), затем вызовите прослушивание. Когда вы слушаете, вы можете принимать соединения и начинать разговор с ними. Когда вы перейдете на адрес в своем браузере, вы сразу увидите данные в сокете. –

Смежные вопросы