
/*********************************************************************************
* File Name : ServerHtml.c
* Created By : chroot
* Creation Date : [2020-11-16 08:43]
* Last Modified : [2020-11-16 09:51]
* Description : web服務器 for c
**********************************************************************************/
#include<stdio.h>
#include<unistd.h>
#include<errno.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<arpa/inet.h>
#include<string.h>
#define PROT 2000
int create_listenfd(void);
void headle_request(int fd);
int main()
{
//1。創建監聽套接字
int sockfd = -1,fd = -1;
struct sockaddr_in server_clie;
bzero(&server_clie,sizeof(server_clie));
socklen_t clie_len = sizeof(server_clie);
sockfd=create_listenfd();
printf("SOCKFD ==> %d\n",sockfd);
if(sockfd == -1)
{
puts("套接字系結失敗");
while(sockfd != -1)
{
puts("重新系結套接字");
sockfd=create_listenfd();
}
}
//2 接收客戶端連接
while(fd == -1){
puts("等待連接...");
fd=accept(sockfd,(struct sockaddr *)&server_clie,&clie_len);
}
perror("Accept");
puts("新增一位用戶");
//3.處理請求
headle_request(fd);
//3. 處理客戶端請求
close(fd);
close(sockfd);
}
int create_listenfd(void)
{
int fd = socket(AF_INET,SOCK_STREAM,0),rest;
struct sockaddr_in sin;
bzero(&sin,sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(PROT);
sin.sin_addr.s_addr = INADDR_ANY;
for(int prot = PROT ;(rest = bind(fd,(struct sockaddr *)&sin,sizeof(sin))) == -1;prot++)
{
sin.sin_port = htons(prot);
}
perror("Bind");
listen(fd,100); perror("listen");
return fd;
}
void headle_request(int fd)
{
char buffer[BUFSIZ];
int nred = read(fd,buffer,sizeof(buffer));
printf("客戶端資料 ==>\n%s\n",buffer);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/220951.html
標籤:應用程序開發區
上一篇:Docker UnicodeEncodeError: 'ascii' codec can't encode characters in position
