C-socket编程-多进程版并发服务器
来源:互联网 发布:linux export 编辑:程序博客网 时间:2024/05/19 13:27
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <arpa/inet.h>#include <sys/socket.h>#include <netinet/in.h>#include "wrap.h"int main(){ //创建套接字 int serv_sock = Socket(AF_INET,SOCK_STREAM,0); //将套接字与IP,PORT绑定 //创建sokaddr_in结构体,并经行本地字节序和网络字节序的转换 struct sockaddr_in serv_addr; memset(&serv_addr,0,sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr=Inet_addr("127.0.0.1"); serv_addr.sin_port = Htons(1234); Bind(serv_sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr)); //进入监听状态,等待用户发起请求 listen(serv_sock,20); //接收客户端请求 struct sockaddr_in clnt_addr; socklen_t clnt_addr_size =sizeof(clnt_addr); int clnt_sock; int pid; while((clnt_sock=Accept(serv_sock,(struct sockaddr *)&clnt_addr,&clnt_addr_size)) !=0) { pid=fork(); if(pid==-1) { perror("fork err"); exit(1); } if(pid==0) { char buf[4096]; int n,i; while((n=read(clnt_sock,buf,sizeof(buf))) != 0) { for(i=0;i<n;i++) { buf[i]=toupper(buf[i]); } write(clnt_sock,buf,n); } //关闭套接字 close(clnt_sock); exit(2); } else { //关闭套接字 close(clnt_sock); } } close(serv_sock); return 0;}
第二个例子
/* For sockaddr_in */#include <netinet/in.h>/* For socket functions */#include <sys/socket.h>#include <unistd.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#define MAX_LINE 16384charrot13_char(char c){ /* We don't want to use isalpha here; setting the locale would change * which characters are considered alphabetical. */ if ((c >= 'a' && c <= 'm') || (c >= 'A' && c <= 'M')) return c + 13; else if ((c >= 'n' && c <= 'z') || (c >= 'N' && c <= 'Z')) return c - 13; else return c;}voidchild(int fd){ char outbuf[MAX_LINE+1]; size_t outbuf_used = 0; ssize_t result; while (1) { char ch; result = recv(fd, &ch, 1, 0); if (result == 0) { break; } else if (result == -1) { perror("read"); break; } /* We do this test to keep the user from overflowing the buffer. */ if (outbuf_used < sizeof(outbuf)) { outbuf[outbuf_used++] = rot13_char(ch); } if (ch == '\n') { send(fd, outbuf, outbuf_used, 0); outbuf_used = 0; continue; } }}voidrun(void){ int listener; struct sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_addr.s_addr = 0; sin.sin_port = htons(40713); listener = socket(AF_INET, SOCK_STREAM, 0);#ifndef WIN32 { int one = 1; setsockopt(listener, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)); }#endif if (bind(listener, (struct sockaddr*)&sin, sizeof(sin)) < 0) { perror("bind"); return; } if (listen(listener, 16)<0) { perror("listen"); return; } while (1) { struct sockaddr_storage ss; socklen_t slen = sizeof(ss); int fd = accept(listener, (struct sockaddr*)&ss, &slen); if (fd < 0) { perror("accept"); } else { if (fork() == 0) { child(fd); exit(0); } } }}intmain(int c, char **v){ run(); return 0;}
0 0
- C-socket编程-多进程版并发服务器
- 多进程并发服务器编程
- 多进程并发服务器编程
- linux socket多进程并发服务器
- 使用socket的Linux上的C语言helloworld多进程并发服务器
- 使用socket的Linux上的C语言helloworld多进程并发服务器
- 使用socket的Linux上的C语言helloworld多进程并发服务器
- [zz] 多进程并发服务器编程
- linux网络编程多进程并发服务器
- linux网络编程多进程并发服务器
- 网络编程(5)多进程并发服务器
- 多进程并发编程--消息传递服务器
- socket 并发服务器 代码案例 (多进程模式)
- unix环境IPC通信之socket(三),tcp采用并发服务器编程实例,多进程方式
- Socket编程实践(4) --多进程并发server
- Socket编程实践(4) --多进程并发server
- Socket编程实践(4) --多进程并发server
- 多进程并发服务器
- BMP转YUV
- js学习记录10
- Android笔记——Button点击事件的几种写法
- Java常用加密算法工具类
- Setting MySQL INNODB Compression KEY_BLOCK_SIZE
- C-socket编程-多进程版并发服务器
- vue仿163musicPC端
- spring源码学习之:xml配置文件标签自定义
- Android-taskAffinity
- 如何在需要登录的界面中使用(需要登录的界面)
- lucene
- 栈相关知识
- Linux 目录结构
- align与float区别