Ниже приведен простой фрагмент кода, который я написал для демонстрации работы HTTP-сервера.Я скомпилировал его и запустил под Cygwin, но я не могу использовать веб-браузер для подключения к этому простому http-серверу.И после запуска простого http-сервера я все еще могу запустить apache на порту 80, и если apache не работает, «netstat -an» показывает, что порт 80 не занят.
Я написал еще одну простую программу, которая отправляетпростая строка "привет" на простом http-сервере, а затем получил ответы.
Что не так с этой программой?почему я не могу подключить его с помощью веб-браузера, но я могу подключить его с помощью другой простой программы?
Когда порт занят?После «bind» или «listen»?
Если одно приложение использует порт определенного сетевого интерфейса (скажем, 192.168.2.1:80, предположим, существует более одного сетевого интерфейса),может ли другое приложение использовать тот же порт на другом интерфейсе (скажем, 192.168.55.1:80)?
при запуске httpd, в списке процессов есть несколько процессов httpd, только одиниспользуя 0.0.0.0:80, если используется cygwin apache, другой httpd использует другой порт UDP?Зачем?
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "sys/types.h"
#include "sys/socket.h"
#include "netinet/in.h"
#include "netdb.h"
#include "unistd.h"
#include "fcntl.h"
#define PORT 80
char HttpHeader[1000];
char HeaderTemplate[] =
"HTTP/1.0 200 OK\r\n"
"Server: PRIMITIVE Server\r\n"
"Date: %s\r\n"
"Content-Type: text/html\r\n"
"Accept-Ranges: bytes\r\n"
"Content-Length: %d\r\n\r\n";
char PageContent[] = "Hello World!";
char GMTNow[] = "11/15/14 00:59:00 GMT";
char ClntRequest[1000];
struct sockaddr_in SocketAddress;
int ClntDescriptor; /* socket descriptor to client */
int SrvrDescriptor; /* socket descriptor for server */
int main(int argc, char* argv[])
{
sprintf(HttpHeader, HeaderTemplate, GMTNow, strlen(PageContent));
SrvrDescriptor = socket(AF_INET, SOCK_STREAM, 0);
SocketAddress.sin_family = AF_INET;
SocketAddress.sin_port = PORT;
SocketAddress.sin_addr.s_addr = INADDR_ANY;
bind(SrvrDescriptor, (struct sockaddr*)&SocketAddress, sizeof(SocketAddress));
listen(SrvrDescriptor, 5);
ClntDescriptor = accept(SrvrDescriptor, 0, 0);
while (1)
{
recv(ClntDescriptor, ClntRequest, sizeof(ClntRequest), 0);
printf("%s\n", ClntRequest);
write(ClntDescriptor, HttpHeader, strlen(HttpHeader));
write(ClntDescriptor, PageContent, strlen(PageContent));
printf("%s", HttpHeader);
printf("%s", PageContent);
}
close(SrvrDescriptor);
return EXIT_SUCCESS;
}