Я начинаю программировать в сети, и у меня есть проект, в котором я должен создать системный проводник. Это означает, что у меня будет возможность написать 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;*/
}
Я не знаю, если есть что-то случилось с моим кодом, но главная проблема в том, что я не знаю, как сделать браузер соединится с сервером. Есть ли что-нибудь, что мне нужно написать в браузере, или мне нужно добавить дополнительный код?
Я сделал это, и он все еще не работает. Только инициализируя порт, у меня будет возможность подключиться? Я имею в виду, что это так просто, потому что я думал, что мне будет гораздо труднее. – user3121051
Вы уже сделали больше всего необходимого (хотя я не запускал ваш код, он не компилировался, может быть, из-за проблем с копированием и вставкой), но при запуске сервера: создать сокет, привязать его к адресу (порт здесь очень важен), затем вызовите прослушивание. Когда вы слушаете, вы можете принимать соединения и начинать разговор с ними. Когда вы перейдете на адрес в своем браузере, вы сразу увидите данные в сокете. –