技术标签: # 网络 # HTTP服务器 后端开发 # Linux socket 服务器
/*
* 1.实现网络连接
* 2.处理客户端请求
*/
#include<unistd.h>
#include<fcntl.h>//文件操作头文件
#include<arpa/inet.h>//网络相关头文件
#include<sys/socket.h>//socket
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//创建socked完成tcp前四步,并返回服务器fd
int initserver();
//处理客户端请求
void handclient(int fd);
int main()
{
//1.实现连接
int serverFd=initserver();
//2.处理请求
int clientfd;
while(1)
{
//1.等待客户端连接
clientfd=accept(serverFd,NULL,NULL);
printf("有客户端连接服务器\n");
//2.处理客户端请求
handclient(clientfd);
//3.close
close(clientfd);
}
return 0;
}
//1. 创建 sockedFd socket网络套接字 fd文件描述符
// fd是个整数,可以代表网络端口
//2. 设置服务器协议簇
// 确定服务器的ip与端口号
//3. 绑定
// 将fd和协议簇绑定
//4. 监听
int initserver()
{
//1.
int fd=socket(AF_INET,SOCK_STREAM,0);
if(fd == -1){
printf("创建socket失败:");
return -1;
}
printf("创建socket成功!\n");
//2.
struct sockaddr_in addr={0};
addr.sin_family = AF_INET;//和socket创建时第一个参数相同
addr.sin_port = htons(80);//所有浏览器用的都是这个端口 ,htons()将小端转为大端
addr.sin_addr.s_addr=INADDR_ANY;//当前电脑上任意网卡都可以,
//inet_addr("127.0.0.1"); //或者可以这样写,绑定本地回环ip
//int_addr("192.168.232.128"); //或者本机ip
//3.
int r = bind(fd,(struct sockaddr*)&addr,sizeof addr);
if(r==-1){
perror("绑定失败:");
close(fd);
return -1;
}
printf("绑定成功!\n");
//4.
r = listen(fd,10);
if(r==-1){
perror("监听失败:");
close(fd);
return -1;
}
printf("监听成功!\n");
return fd;
}
//处理客户端请求
void handclient(int fd)
{
//接收客户端的请求
char buff[1024*1024]={0};//1M
int r=read(fd,buff,sizeof buff);
if(r>0){
printf("接收到客户端请求:%s\n",buff);
//解析客户端请求
char fileName[20]={0};
sscanf(buff,"GET /%s",fileName);
printf("解析出的文件名为:%s",fileName);
//根据文件名 得到文件类型,告诉服务器 发送什么文件
char* mime = NULL;
if(strstr(fileName,".html")){
mime="text/html";//文本类型或html类型
}else if(strstr(fileName,".jpg")){
mime="image/jpg";//图片类型
}
//构建响应
char response[1024*1024]={0};
//首行与header
sprintf(response,"HTTP/1.1 200 0k\r\nContent-type:%s\r\n\r\n",mime);
//写入文件内容
int responseLen=strlen(response);
int responseLen=strlen(response);
int fileFd = open(fileName,O_RDONLY);//只读打开文件
int fileLen = read(fileFd,response+responseLen,sizeof(response)-responseLen);
write(fd,response,responseLen+fileLen);
close(fileFd);
sleep(2);
}
}
python多线程实现tcp socket 服务器代码 客户端代码 ...
服务器程序: 1. 创建一个socket,用函数socket() 2. 绑定IP地址、端口等信息到socket上,用函数bind() 3.设置允许的最大连接数,用函数listen() 4.接收客户端上来的连接,用函数accept() 5.收发数据,用函数send()和recv(),或者read()和write() 6.关闭网络连接 客户端程序: 1.创建一个socket,用函数soc...
这个是简单版,只为提供搭建TCP服务器简易模板,代码在linux可直接运行 ...
客户端: 服务端:...
文章目录 前言 一、Internet历史 二、网络体系结构 1.OSI模型 2.TCP/IP模型 三、网络设计框架 四、TCP服务器编写流程 五、TCP客户端编写流程 总结 前言 socket编程是一门网络编程技术,在主要的网络通信中都会使用到它,可以使用socket编程来实现计算机之间的通信。 一、Internet历史 1968:ARPAnet(阿帕网) 采用的协议 NCP(网络控制协议). i...
刚刚我们实现了一个TCP通信, 但是效果不太理想, 那么我们来实现一个能和多用户连续通信的TCP吧~ TCP通信流程以及代码实现 文章目录 原因分析 多进程实现并发服务器 多线程实现并发服务器 原因分析 我们的TCP之所以只能和用户进行单此通信, 是因为主进程要完成的事情太多了, 他既要获取新连接, 又要与用户进行通信 如果我们让一个执行流只负责一件事情, 就算某个执行流阻塞了, 也不会影响其他的...
TCP服务器 基于上一篇文章,我们利用socket编写了一个UDP服务器,链接如下:UDP服务器 今天我们来实现一个TCP服务器并且对这个TCP服务器进行优化。 TCP协议的特点 有连接的 面向字节流的 可靠的传输 - TCP服务器需要用到的接口 TCP服务器和UDP服务器相同,都是利用SOCKET API接口来实现的,那么创建socket,和绑定bind和UDP是一摸一样的,但是因为我们上面讲到...
学习笔记,小白可以相互学习,大佬看到能告诉咱理解不对的地方就好了。 1.TCP服务器流程 1.socket,创建服务器(创建socket套接字) 2.bind,设置服务器的IP地址和端口号(将socket和服务器的IP地址和端口号进行绑定) 3.listen,启动监听(启动服务器) 4. accept,等待服务器的连接请求(如果没有连接请求则等待,如果有连接请求,则建立连接) whil...
11.2.2.5 选择监听地址 将服务器绑定到正确的地址很重要,这样客户才能与之通信。前面的例子都使用’localhost’作为IP地址,这会限制其与在同一服务器上运行 的客户的连接。可以使用服务器的一个公共地址,如gethostname()返回的值,来允许其他主机连接。下面这个例子修改了回送服务器,使它监听通过一个命令行参数指定的地址。 测试这个服务器之前,需要对客户程序...