【Linux网络编程】基于TCP的多线程(pthread)版本最简陋的HTTP服务器
来源:互联网 发布:mac镜像文件dmg下载 编辑:程序博客网 时间:2024/06/11 12:45
服务器代码:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <pthread.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#define SOCK_FAIL 1#define BIND_FAIL 2#define LISTEN_FAIL 3#define USE_ERROR 4#define ACCPET_FAIL 5// 使用说明static void Usage(const char* arg) {printf("Usage:%s [server_ip] [server_port]\n", arg);}int startup(const char* ip, int port){// 1. new socket int sock = socket(AF_INET, SOCK_STREAM, 0 );if(sock < 0){perror("socket ---");exit(SOCK_FAIL);}// 2. bind socketstruct sockaddr_in local;local.sin_family = AF_INET;local.sin_addr.s_addr = inet_addr(ip);local.sin_port = htons(port);int opt = 1;setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));if( bind(sock, (struct sockaddr*)&local, sizeof(local)) < 0){perror("bind ---");exit(BIND_FAIL);}// 3. listen socketif( listen(sock, 5) < 0){perror("listen ---");exit(LISTEN_FAIL);}return sock;}void* handler(void *arg){int sock = (int)arg;char buf[10240];while(1){ssize_t s = read(sock, buf, sizeof(buf)-1);if(s < 0){perror("Read");exit(-1);}else if (s > 0){const char* msg = "HTTP/1.1 200 OK\r\n\r\n<html><h1>This is title</h1></html>\r\n";buf[s] = '\0';printf("- message: %s \n", buf);write(sock, msg, strlen(msg));break;}else break;}printf("quit\n");}int main(int argc, char* argv[]){if(argc != 3){Usage(argv[0]);return USE_ERROR;}int listen_sock = startup(argv[1], atoi(argv[2])); // ip portstruct sockaddr_in peer;socklen_t len = sizeof(peer);printf("listen .... \n");while(1){int new_sock = accept(listen_sock, (struct sockaddr*)&peer, &len);if( new_sock < 0){perror("accept --- ");continue;}printf("connect sucess ! client : ip %s prot %d \n", inet_ntoa(peer.sin_addr), ntohs(peer.sin_port));pthread_t tid;pthread_create(&tid, NULL, handler, (void*)new_sock);pthread_detach(tid);}return 0;}
阅读全文
0 0
- 【Linux网络编程】基于TCP的多线程(pthread)版本最简陋的HTTP服务器
- 【Linux网络编程】基于TCP的线程池(pthread_pool)版本HTTP服务器
- Linux网络编程 基于tcp的多线程的服务器
- Linux网络编程【三】:TCP服务器多进程和多线程(http访问)版本
- Linux下的多线程编程(pthread)
- Linux下的多线程编程(pthread)
- Linux下的多线程编程(pthread)
- Linux的多线程编程-pthread
- pthread最简单的多线程编程-001
- pthread最简单的多线程编程-002
- pthread最简单的多线程编程-003
- pthread最简单的多线程编程-004
- 【Linux网络编程】基于TCP流 I/O多路转接(poll) 的高性能http服务器
- 【Linux网络编程】基于TCP多进程(fork)版本客户端/服务器
- 最简单的linux tcp网络编程
- Linux下的多线程编程(linux pthread)
- 基于Linux的TCP网络编程
- 基于Linux的TCP网络编程
- 【Shader】给 Shader 添加遮罩
- 65、SSM框架使用笔记
- 检查PHP脚本的执行效率(xdebug)
- iOS ARC环境下dealloc的使用
- Androd TextView 点击变化效果
- 【Linux网络编程】基于TCP的多线程(pthread)版本最简陋的HTTP服务器
- kotlin汇总7-Coroutines
- Java-高并发探究
- PowerDesigner 16.5 显示右侧工具箱
- Android studio libs引用第三方so库
- 【详细内容】NCS8805 RGB/LVDS-to-eDP w/ Scaler芯片规格书
- 关于ListView、GridView的OnItemClickListener不响应解决
- 直方图
- 图像处理之_OpenCV入门