网站大量收购独家精品文档,联系QQ:2885784924

2高并发服务器多线程服务器.docxVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2高并发服务器多线程服务器

1多线程并发服务器多线程服务器模型在使用线程模型开发服务器时需要考虑以下问题:A 调整进程最大文件描述符上限B 线程如有共享数据,考虑线程同步C 服务于客户端线程退出时,退出处理。(退出值,分离态)D 系统负载,随着连接客户端增加,导致其它线程不能及时得到CPU2.案例说明server.c,代码如下:/* server.c */#include stdio.h#include string.h#include netinet/in.h#include arpa/inet.h#include pthread.h#include wrap.h#define MAXLINE 80#define SERV_PORT 8000struct s_info {struct sockaddr_in cliaddr;int connfd;};void *do_work(void *arg){int n,i;struct s_info *ts = (struct s_info*)arg;char buf[MAXLINE];char str[INET_ADDRSTRLEN];/* 可以在创建线程前设置线程创建属性,设为分离态,哪种效率高内? */pthread_detach(pthread_self());while (1) {n = Read(ts-connfd, buf, MAXLINE);if (n == 0) {printf(the other side has been closed.\n);break;}printf(received from %s at PORT %d\n,inet_ntop(AF_INET, (*ts).cliaddr.sin_addr, str, sizeof(str)),ntohs((*ts).cliaddr.sin_port));for (i = 0; i n; i++) {buf[i] = toupper(buf[i]); }Write(ts-connfd, buf, n);}Close(ts-connfd);}int main(void) {struct sockaddr_in servaddr, cliaddr;socklen_t cliaddr_len;int listenfd, connfd;int i = 0;pthread_t tid;struct s_info ts[383];listenfd = Socket(AF_INET, SOCK_STREAM, 0);bzero(servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(SERV_PORT);Bind(listenfd, (struct sockaddr *)servaddr, sizeof(servaddr));Listen(listenfd, 20);printf(Accepting connections ...\n);while (1) {cliaddr_len = sizeof(cliaddr);connfd = Accept(listenfd, (struct sockaddr *)cliaddr, cliaddr_len);ts[i].cliaddr = cliaddr;ts[i].connfd = connfd;/* 达到线程最大数时,pthread_create出错处理, 增加服务器稳定性*/pthread_create(tid, NULL, do_work, (void*)ts[i]);i++;}close(listenfd);return 0;}client.c/* client.c */#include stdio.h#include string.h#include unistd.h#include netinet/in.h#include wrap.h#define MAXLINE 80#define SERV_PORT 8000int main(int argc, char *argv[]){struct sockaddr_in servaddr;char buf[MAXLINE];int sockfd, n;sockfd = Socket(AF_INET, SOCK_STREAM, 0);bzero(servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;inet_pton(AF_INET, 127.0.0.1, servaddr.sin_add

文档评论(0)

2017ll + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档