- 论坛徽章:
- 0
|
拜托各位能不能帮我一下:我因为这段时间谈恋爱所以没有好好学习,所以写不出下面的程式,如果周四前还是没有这个程式的话,我就死定啦,这一年就白学了,现在真后悔呀!如果我能度过这个难关,我以后一定努力学习,拜托啦!
能不能帮我写一个web server程序要达到如下要求:
1。用c++,在unix上运行。
2。能够返回页面给一个真正的www的用户
3。是一个concurrent server,能够同时处理一条以上request in parallel using processes。
4。all socket I/O should use system calls (not iOSTREAM or STDIO library calls), however error messages and log file writing can use library calls. Reading files can be done with iOSTREAM calls or systems calls and will depend on which is easier.
5. 仅仅需要处理GET ,HEAD 请求。
6。能够返回足够的协议消息(protocol messages) 例如: OK or fail acknowledgements, content-Length: Content-Type: 等等)
7。要支持CGI程序
8。要求使用自己的端口(port number):而不是80
9。有自己的2页网页,和一些cgi程序。
10。it will use a log file to record all transactions
相关的code如下:
#include <unistd.h>;
#include <iostream.h>;
#include <cstddef>;
#include <string.h>;
#include <stdlib.h>;
#include <sys/types.h>;
#include <sys/socket.h>;
#include <netinet/in.h>;
#include <arpa/inet.h>;
#include <netdb.h>;
int main(int argc, char *argv[]) {
unsigned int cliaddrlen, myport;
int stat, sock, newsock;
struct sockaddr_in myaddr, cliaddr;
struct hostent *hostptr;
char *hostip;
if(argc != 2) {
cerr << "usage: server-prog port-num\n"; exit(1);
}
// establish server socket
sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock < 0) {
cerr << "server cant open socket\n"; exit(1);
}
myaddr.sin_family = AF_INET;
myaddr.sin_addr.s_addr = htonl(INADDR_ANY);
myaddr.sin_port = htons(atoi(argv[1]));
stat = bind(sock, (struct sockaddr *) &myaddr, sizeof(myaddr));
if(stat < 0) {
cerr << "server cant bind socket\n"; exit(1);
}
// set socket passive
stat=listen(sock,5);
if(stat < 0) {
cerr << "server cant make socket listen\n"; exit(1);
}
cliaddrlen = sizeof(struct sockaddr_in);
newsock=accept(sock,(struct sockaddr *) &cliaddr,&cliaddrlen);
if(newsock < 0) {
cerr << "server accept error\n"; exit(1);
}
hostip = inet_ntoa(cliaddr.sin_addr);
cout << "server: connect from IP " << hostip << "\n";
hostptr = gethostbyaddr((char *)&cliaddr.sin_addr,
sizeof(struct in_addr),AF_INET);
if(hostptr == 0)
cout << "server: client unknown name\n";
else
cout << "server: client name is " << hostptr->;h_name << "\n";
//
// server code goes here
//
close(newsock);
close(sock);
}
小弟先谢谢各位大侠了! |
|