c实现web前端的http协议暴露

#include<stdio.h>
#include<WinSock2.h>//包含网络编程的头文件,引入静态库
#pragma comment(lib,"ws2_32.lib")

int merror(int retdata,int error,char* showInfo) {
	if (retdata == error)
	{
		perror(showInfo);
		getchar();
		return -1; 
	}
	return 0;
}
void sendhtml(SOCKET s, char* filename);
int main() {
	printf("欢迎访问web服务器...\n");
	WSADATA wsadata;
	int res = WSAStartup(MAKEWORD(2,2), &wsadata);//确定socket的版本信息
	merror(res, WSAEINVAL, "申请socket失败");
	//第一个是协议族,af_inet使用ipv4地址,第二个是传输类型,SOCK_STREAM流传输,第三个是指定的传输协议,tcp
	SOCKET server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	merror(server,INVALID_SOCKET,"创建socket失败");
	struct sockaddr_in seraddr;
	seraddr.sin_family = AF_INET;//和创建的时候必须一样 ipv4
	seraddr.sin_port = htons(80);//注意电脑上的数据和网络上的数据存储是有区别的,网络是大端存储,pc是小端存储
	seraddr.sin_addr.s_addr = INADDR_ANY;//监听任意地址

	res = bind(server,&seraddr,sizeof(seraddr));
	merror(res,SOCKET_ERROR,"绑定失败...\n");
	res = listen(server,5);
	merror(res,SOCKET_ERROR,"监听失败...\n");

	struct sockaddr_in claddr;
	int cllen = sizeof(claddr);
	while(1) {
		SOCKET client = accept(server, &claddr, &cllen);//谁连进来了,发了多少数据
		merror(client, INVALID_SOCKET, "连接失败...\n");
		char revdata[1024] = "";
		recv(client, revdata,1024, 0);
		printf("%s共接收到%d字节数据\n", revdata, strlen(revdata));
		/*char senddata[1024] = "<h1 style=\" color:red;\">你好</h1>";
		send(client, senddata, strlen(senddata), 0);*/
		char* filename = "./index.html";//html的存放路径(当前目录下的index.html文件)
		sendhtml(client, filename);
		closesocket(client);
	}
	closesocket(server);
	WSACleanup();

	getchar();
		return 0;
}
void sendhtml(SOCKET s,char *filename) {
	FILE* pfile = fopen(filename,"r");
	if (pfile ==NULL)
	{
		printf("打开文件失败\n");
		return;
	}
	char temp[1024] = "";
	do
	{
		fgets(temp, 1024, pfile);
		send(s, temp, strlen(temp), 0);
	} while (!feof(pfile));
	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Double Handsome

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值