之前一直想用c语言写一个服务,通过浏览器访问ip加端口,返回数据,刚写了一个简单的例子返回404现在记下来,也供有同样需求的同学学习。
/*
* server.c
* 请直接将本代码复制粘贴到你的编译环境中,编译且运行.
* 运行后,可在浏览器中输入地址http://127.0.0.1/来访问server.
* */
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#pragma comment(lib , "Ws2_32.lib")
int main( int argc , char* argv[])
{
char msg[1000];
int serverSock , connectingSock;
struct sockaddr_in serverAddr , connectingAddr;
int addrlen ;
serverSock = socket( AF_INET , SOCK_STREAM , IPPROTO_TCP);
if( serverSock <0)
{
puts("socket建立失败");
exit(1);
}
addrlen = sizeof(struct sockaddr);
memset( &serverAddr , 0 , addrlen);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(8888);
serverAddr.sin_addr.s_addr = inet_addr("192.168.73.128");
if( bind( serverSock , (struct sockaddr*)&serverAddr , sizeof(struct sockaddr_in) )<0)
{
puts("绑定IP 地址到socket失败");
exit(1);
}
if(listen( serverSock , 10 ))
{
puts("设置socket为监听状态失败");
}
while(1){
puts("等待客户端连接...");
connectingSock = accept( serverSock , (struct sockaddr*)&connectingAddr , &addrlen);
if( connectingSock <0 )
{
puts("处理连接时发生错误");
break;
}
memset( msg , 0 , 1000) ;
if ( recv( connectingSock , msg , 999 , 0) <= 0 )
{
puts("接收消息失败");
}else{
puts( msg);
}
//sprintf(msg,"HTTP/1.1 200 OK Date: Wed, 15 Jul 2009 08:48:40 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-AspNet-Version: 2.0.50727 Cache-Control: private Content-Type: text/html; charset=utf-8 Content-Length: 43775");
sprintf(msg, "HTTP/1.1 404 Not Found\r\nServer: %s\r\nContent-Type: text/html\r\nContent-Length: 257271\r\nConnection: close\r\n\r\n", "Apache");
memset(&msg,0,sizeof(msg));
sprintf(msg,"<html><head><title>404 Not Found</title></head><body bgcolor=\"white\"><center><h1>404 Not Found</h1></center><hr><center>hahahahahah %s</center></body></html>","牛逼class");
char html[100] = "/r/n/r/n <html><body>work hard</body></html>";
strcat(msg,html);
if( send( connectingSock , msg, strlen(msg ) , 0) <=0 )
{
puts("发送消息失败");
}else{
puts("发送消息成功");
}
close(connectingSock);
}
close(serverSock);
}