首页 > 其他分享 >C语言编写Web服务器

C语言编写Web服务器

时间:2022-11-17 20:32:15浏览次数:46  
标签:Web SOCKET seraddr 端口 C语言 char 服务器 端口号



相关视频——C/C++技术教学:web 网络服务器开发!纯C语言手写web服务器,仅需 80 行代码,制作出你的专属服务器_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

我的小站——半生瓜的blog,同步更新哦。


C语言编写Web服务器

  • ​​端口​​
  • ​​Tcp服务器​​
  • ​​代码实现​​

端口

  1. 什么是端口?
    物理端口:电脑网口、USB、看的见的接口。
    虚拟端口:程序和网络进行通信的端口。
    端口就好比一个房子的门,是初入这个房子的必经之路。
  2. 端口号
    端口是通过端口号来标记的,端口号只有整数,范围是从0到65535。
    (为什么最大是65535?)
  3. 端口号怎么分配的
    端口号不是随意使用的,而是按照一定的规定进行分配。
  4. 知名端口
    知名端口是众所周知的端口号,范围从0到1023,
    80端口分配给HTTP服务,
    21端口分配给FTP服务。
  5. 动态端口
    动态端口的范围是从1024到65535,由操作系统进行分配。
    之所以称为动态端口,是因为它一般不固定分配某种服务,而是动态分配。
    动态分配是指当一个系统进程或应用程序进程需要网络通信时,
    它向主机申请一个端口,主机从可用的端口号中分配一个供它使用。
    当这个进程关闭时,同时也就释放啦它所占用的端口号。

Tcp服务器

如同接电话的过程一样,在程序中,如果想要完成一个tcp服务器的功能,需要的流程如下:

  1. socket创建一个套接字
  2. bind绑定ip和port
  3. listen使套接字变为可以被动链接
  4. accept等待客户端的链接
  5. recv/send接收发送数据

代码实现

//web Server
#include<stdio.h>
#include<stdbool.h>
#include<WinSock2.h>//包含网络编程的头文件,引入静态库
#pragma comment(lib,"ws2_32.lib")
bool isok;
int merror(int redata,int error,char* showinfo)
{
if (redata == error)
{
perror(showinfo);
getchar();
return -1;
}
return 0;
}
void sendhtml(SOCKET s, char* filename);
int main(void)
{
printf("weclome to my WebServer\n");
WSADATA wsdata;
WSAStartup(MAKEWORD(2,2),&wsdata);//确定socket版本信息
//short两个字节2.2
merror(isok,WSAEINVAL,"申请socket失败");
//第一个参数-协议族,决定socket的地址类型
//第二个参数-传输类型,SOCK_STREAM流传输
//第三个参数-指定的传输协议,tcp
SOCKET server = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//使用af-inet,ipv4地址
merror(server, INVALID_SOCKET, "创建socker失败");
struct sockaddr_in seraddr;
seraddr.sin_family = AF_INET;//和创建的时候一样,使用了Ipv4
seraddr.sin_port = htons(80);//注意网络中的数据和电脑上的数据存储是有区别的,网络是大端存储,pc是小端存储
seraddr.sin_addr.s_addr = INADDR_ANY;//监听任意的地址
isok = bind(server,&seraddr,sizeof(seraddr));
merror(isok, SOCKET_ERROR, "绑定失败...\n");
isok = listen(server, 5);
merror(isok, 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 sendata[1024] = "<h1 style =\" color:pink;\">hello,i'm sb</h1>";
send(client,sendata,strlen(sendata),0);
char* filename = "/";//填入文件名称xxx.html
void sendhtml(client, filenama);
closesocket(client);
}
closesocket(server);
WSACleanup();
getchar();
return 0;
}
//打开文件-网页
//将文件放入项目文件夹下
void sendhtml(SOCKET s, char* filename)
{
FILE* pfile = fopen(filename, "r");
if (pfile == NULL)
{
printf("文件打开失败");
return;
}
char temp[1024] = "";
do
{
fgets(temp, 1024, pfile);
send(s, temp, strlen(temp), 0);
} while (!feof(pfile));
}


标签:Web,SOCKET,seraddr,端口,C语言,char,服务器,端口号
From: https://blog.51cto.com/u_15333750/5866148

相关文章

  • C语言实现图书管理系统
    相关视频——C语言课程设计实战:图书管理系统!计算机专业同学的一大难题,今天用代码实战演示,手把手带你完成!_哔哩哔哩(゜-゜)つロ干杯~-bilibili我的小站——半生瓜のblog1.......
  • C语言的灵魂——指针
    相关视频——强烈推荐【强烈推荐】4小时彻底掌握C指针-顶尖程序员图文讲解-UP主亲自翻译校对(已完结)_哔哩哔哩(゜-゜)つロ干杯~-bilibili我的小站——半生瓜のblog......
  • 【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办
    问题描述当AzureWebApp进行安全扫描后,发现依旧支持很多弱TLS加密套件(WeakTLSCiphersSuite),那么是否有办法来关闭这些弱的加密套件呢?在WindowsIIS环境中,可以通过......
  • 一台服务器部署3个mysql实例
    1.数据库的安装过程:略,可以参考我以前的博客2.将安装目录copy2份,本实例的安装目录为:/project/mysql3306,所以复制两份:/project/mysql3307和/project/mysql33083.本文在一......
  • Centos7 SRS直播服务器搭建
    安装git工具,然后进行安装yum-yinstallgitgitclone-b4.0releasehttps://gitee.com/ossrs/srs.gitcdsrs/trunk./configuremake./objs/srs-cconf/s......
  • 群集+LVS虚拟服务器
    一,群集1.何为群集群集:由多台主机构成,但对外只表现为一个整体,只提供一个访问入口(域名或ip),相当于一台大型计算机。2.群集存在的原因互联网应用中,随着站点对硬件性能、响......
  • 6. 服务器内部转发与客户端重定向
    #服务器内部转发##req.getRequestDispatcher("注册的servlet的url,不带/").forward(req,resp);##客户端仅发起一次请求,客户端地址栏不会改变。#客户端重定向##res......
  • 万物皆可集成系列:低代码对接Web Service接口
    我们知道活字格支持不写代码实现双向API绑定,那么没那么主流的WebService接口(SOAP协议+XML交互格式)呢?其实对接的思路没有那么复杂,得用C#编码来对接的。作为一款企业级低代......
  • GPS北斗NTP授时服务器助力数字化校园网络建设
    GPS北斗NTP授时服务器助力数字化校园网络建设GPS北斗NTP授时服务器助力数字化校园网络建设京准电子科技官微——ahjzsz随着网络的普及,许多单位都建了自己的园区网,使用的......
  • WebGL 着色器内置变量
    WebGL着色器内置变量WebGL中文教程网本文是WebGL教程(电子书)的2.7节内容着色器语言在GPU的着色器单元执行,javascript语言、C语言在CPU上执行,任何一种语言的语法规则,整......