套接字编程(四)-----多线程
来源:互联网 发布:c语言绘图 编辑:程序博客网 时间:2024/04/30 01:36
基于多线程服务器的优缺点
优点:开销小
缺点:不稳定
服务器端:
#include<stdio.h>#include<pthread.h>#include<stdlib.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<netinet/in.h>#include<string.h>void* handleRequest(void* arg){ char buf[10240]; int sock=(int)arg; while(1) { ssize_t s=read(sock,buf,sizeof(buf)-1); //success if(s>0) { buf[s]=0; printf("%s\n",buf); const char *msg= "HTTP/1.1 200 OK\r\n\r\n<html><h1>This is title</h1></html>\r\n"; write(sock,msg,strlen(msg)); break; } else if(s==0) { printf("client is quit!\n"); break; } else { perror("read"); break; } } close(sock);}int startup(const char *_ip,int _port){ //create socket int sock=socket(AF_INET,SOCK_STREAM,0); if(sock<0) { perror("socket"); return 2; } int flag=1; setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&flag,sizeof(flag)); //bind struct sockaddr_in local; local.sin_family=AF_INET; local.sin_port=htons(_port); local.sin_addr.s_addr=inet_addr(_ip); if(bind(sock,(struct sockaddr*)&local,sizeof(local))<0) { perror("bind"); return 3; } //listen if(listen(sock,10)<0) { perror("listen"); return 4; } return sock;}static void usage(char *proc){ printf("usage:%s [server_ip] [server_port]",proc);}int main(int argc, char *argv[]){ if(argc!=3) { usage(argv[0]); return 1; } int listen_sock=startup(argv[1],atoi(argv[2])); struct sockaddr_in peer; socklen_t len=sizeof(peer); while(1) { int new_sock=accept(listen_sock,(struct sockaddr*)&peer,&len); if(new_sock<0) { perror("accept"); continue; } printf("client ip:%s,port:%d\n",inet_ntoa(peer.sin_addr),ntohs(peer.sin_port)); pthread_t id; pthread_create(&id,NULL,handleRequest,(void*)new_sock); pthread_detach(id); } return 0;}
阅读全文
0 1
- 套接字编程(四)-----多线程
- 原始套接字编程(四)
- 套接字网络编程基础(四)
- UNIX网络编程---基本TCP套接字编程(四)
- C#网络编程 (四) 套接字编程原理
- 多线程套接字编程-----程序实例(C++实现)
- 套接字编程——多线程并发服务器
- 多线程与异步套接字的编程笔记
- TCP套接字编程
- PHP套接字编程
- 异步套接字编程
- PHP套接字编程
- Java 套接字编程
- 套接字编程基本概念
- 套接字编程步骤
- PHP套接字编程
- Windows套接字编程
- linux套接字编程
- python简单模拟:把树存储在数据表中
- JavaScript中的包装对象
- AVL树
- 如果Google面试让你用python写一个树的遍历程序
- 微服务实战(一):微服务架构的优势与不足
- 套接字编程(四)-----多线程
- C#程序员初学Python
- java中注解的使用
- GSettings简介和使用
- 多线程-死锁问题概述和使用
- 大整数排序
- 解决ultraedit下,verilog .v 文件 中文注释乱码问题
- 有限域和离散对数问题(ECC椭圆曲线算法2)
- Maven学习(四)