我正嘗試在C中編寫一個簡單的網絡服務器。截至目前,我可以接收連接並接收完整的消息。但是,根據HTTP/1.0協議,我希望能夠在遇到「\ r \ n \ r \ n」序列時將信息發送回客戶端。但是,當使用Telnet來測試我的服務器時,當我輸入「\ r \ n \ r \ n」時,服務器不會執行任何操作,直到我在客戶端上點擊「^」「。我對Apache進行了測試,Apache沒有這個問題。所以我希望能夠提供一些關於如何模仿Apache行爲的信息。我的代碼在下面添加,但請記住我沒有接近完成的地方,也沒有執行過很多錯誤檢查。 謝謝!在C中編寫網絡服務器
所有的main(){
int sock_fd = 0;
int client_fd = 0;
struct sockaddr_in socket_struct;
/*Creates the socket*/
if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
fprintf(stderr, "%s: %s\n", getprogname(), strerror(errno));
exit(EXIT_FAILURE);
}/*Ends the socket creation*/
/*Populates the socket address structure*/
socket_struct.sin_family = AF_INET;
socket_struct.sin_addr.s_addr=INADDR_ANY;
socket_struct.sin_port =htons(port);
if (bind(sock_fd, (struct sockaddr*) &socket_struct, sizeof(socket_struct)) < 0)
{
fprintf(stderr, "%s: %s\n", getprogname(), strerror(errno));
exit(EXIT_FAILURE);
}//Ends the binding.
if (listen(sock_fd, 5) <0)
{
fprintf(stderr, "%s: %s\n", getprogname(), strerror(errno));
exit(EXIT_FAILURE);
}//Ends the listening function
if ((client_fd = accept(sock_fd, NULL, NULL)) <0)
{
fprintf(stderr, "%s: %s\n", getprogname(), strerror(errno));
exit(EXIT_FAILURE);
}//Ends the accepting.
while ((size = read(client_fd, msg, 1024)) > 0)
{
//size = recv(client_fd, msg, 1024, MSG_PEEK|MSG_WAITALL);
if ((msg[size-4] == 13) && (msg[size-3] == 10)&&(msg[size-2] == 13) && (msg[size-1] == 10))
{
char* buffer = (char *)malloc(sizeof("The msg was: ")+ sizeof(msg));
sprintf(buffer, "The msg was: %s", msg);
send(client_fd, buffer, sizeof("The msg was: ")+ sizeof(msg), MSG_OOB);
}
}//ends the while loop for receiving data
close(client_fd);
}
試着做一個'printf()'看看它是否進入while循環中的if()條件。似乎有一個問題@'send()' –
它不是一個發送問題,因爲我已經做了printf()的事情發佈之前......謝謝 – tpar44