socket并发服务器(frok)
来源:互联网 发布:java 运行环境下载 编辑:程序博客网 时间:2024/05/18 17:44
//服务器#include<stdio.h>#include<stdlib.h>#include<netinet/in.h>//套接字地址结构#include<sys/socket.h>//socket函数#include<strings.h>//字节操纵函数 bzero#include<string.h>#include<unistd.h>void str_echo(int sockfd){ char buffer[100]; int n; memset(buffer, 0, 100); while((n = read(sockfd, buffer, 100)) > 0) { buffer[n+1] = '\0'; printf("%s\n", buffer); write(sockfd, buffer, n); memset(buffer, 0, 100); }}int main(){ int listenfd, connfd;//监听套接字、已连接的套接字 struct sockaddr_in server_sockaddr, client_sockaddr; socklen_t clientlen; pid_t childpid;//子进程号 if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { fprintf(stderr, "Socket failed\n"); exit(EXIT_FAILURE); } bzero(&server_sockaddr, sizeof(server_sockaddr)); server_sockaddr.sin_family = AF_INET; server_sockaddr.sin_port = htons(9877);//端口号,以网络字节序存储 server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);//选择通配地址 if(bind(listenfd, (struct sockaddr*)&server_sockaddr, sizeof(server_sockaddr)) == -1)//绑定本地地址和端口号 { fprintf(stderr, "Bind failed\n"); exit(EXIT_FAILURE); } if(listen(listenfd, 5) == -1) { fprintf(stderr, "Listen faliled\n"); exit(EXIT_FAILURE); } for( ; ; ) { clientlen = sizeof(client_sockaddr); if((connfd = accept(listenfd, (struct sockaddr*)&client_sockaddr, &clientlen)) == -1) { fprintf(stderr, "Accept failed\n"); exit(EXIT_FAILURE); } if((childpid = fork()) == 0)//创建一个子进程处理客户端的连接 { close(listenfd);//关闭接听套接字 str_echo(connfd); close(connfd); exit(0);//子进程退出 } close(connfd); }}
//客户端程序#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<strings.h>#include<string.h>#include<netinet/in.h>#include<sys/socket.h>#include<arpa/inet.h>//地址转换函数void str_cli(int sockfd){ char sendline[100], recvline[100]; int n; memset(sendline, 0, 100); memset(recvline, 0, 100); while(fgets(sendline, 100, stdin) != NULL) { write(sockfd, sendline , strlen(sendline)); memset(sendline, 0, 100); read(sockfd, recvline, 100); fputs(recvline, stdout); memset(recvline, 0, 100); }}int main(int argc, char **argv){ int sockfd; struct sockaddr_in server_sockaddr;//服务器参数 if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { fprintf(stderr, "Socket failed\n"); exit(EXIT_FAILURE); } bzero(&server_sockaddr, sizeof(server_sockaddr));//清零 server_sockaddr.sin_family = AF_INET; server_sockaddr.sin_port = htons(9877); if(inet_pton(AF_INET, argv[1], &server_sockaddr.sin_addr) == -1)//使用地址转换函数 { fprintf(stderr, "inet_pton failed\n"); exit(EXIT_FAILURE); } if(connect(sockfd, (struct sockaddr*)&server_sockaddr, sizeof(server_sockaddr)) == -1)//连接服务器 { fprintf(stderr, "Connect failed\n"); exit(EXIT_FAILURE); } str_cli(sockfd); exit(0);}
阅读全文
0 0
- socket并发服务器(frok)
- socket服务器并发处理
- socket通信---并发服务器图解
- socket通信---并发服务器图解
- socket 并发服务器 多线程模式
- Java Socket编程(四)重复和并发服务器
- Java Socket编程(四) 重复和并发服务器
- socket 并发服务器 代码案例 (多进程模式)
- linux socket多进程并发服务器
- 5高并发服务器:socket IPC
- 【Socket编程】篇四之并发服务器
- Java Socket编程(三) 并发服务器
- day10 socket编程高并发服务器
- frok boom
- epoll+socket实现 socket并发 linux服务器 (c)
- 深入研究socket编程(4)——并发服务器(TCP)
- Linux系统编程(35)—— socket编程之TCP服务器的并发处理
- 《socket编程由笑嘻嘻到绝望》(epoll简单高并发服务器模型)
- 搜索练习题L-12
- 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接
- android studio ndk开发中c语言中异常处理
- 在SQL Server 事务中使用Savepoints来保存提交点
- Mongoose deployment
- socket并发服务器(frok)
- CSDN-markdown编辑器使用教程
- 排序算法之插入排序
- 微信小程序开发demo
- java 制作炸弹人
- Tensorflow 01: mnist-softmax
- 未能加载文件或程序集“MySql.Data, Version=5.2.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或它
- 解决maven与eclipse中@override出现must override a superclass method错误
- Android Studio遇到的问题及解决过程