linux网络编程(二)高并发服务器
生活随笔
收集整理的這篇文章主要介紹了
linux网络编程(二)高并发服务器
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
linux網(wǎng)絡(luò)編程(二)高并發(fā)服務(wù)器
- 錯(cuò)誤處理
- 高并發(fā)服務(wù)器
- 多進(jìn)程并發(fā)服務(wù)器
- 客戶端
錯(cuò)誤處理
#include "wrap.h"int Bind(int fd, const struct sockaddr* sa, socklen_t salen) {int ret;if ((ret = bind(fd, sa, salen)) < 0){perror("bind error:");exit(1);}return ret;}int Accept(int fd, struct sockaddr* sa, socklen_t* salenptr) {int ret;again:if ((ret = accept(fd, sa, salenptr)) < 0){if ((errno == ECONNABORTED) || (errno == EINTR)){goto again;}else{perror("accept error:");exit(1);}}return ret;}int Socket(int family, int type, int protocol) {int ret;if ((ret=socket(family, type, protocol)) == -1){perror("socket error:");exit(1);}return ret; }int Listen(int fd, int backlog) {int ret;if ((ret = listen(fd, backlog)) < 0){perror("listen error:");exit(1);}return ret;}pid_t Fork() {pid_t pid;pid = fork();if (pid < 0){perror("pid error:");exit(1);}else if (pid == 0){//子進(jìn)程return pid;}else{//主進(jìn)程return pid;}}ssize_t Read(int fd, void* ptr, size_t nbytes) {ssize_t n; again:if ((n = read(fd, ptr, nbytes)) == -1){if (errno == EINTR)goto again;elsereturn -1;}return n; }高并發(fā)服務(wù)器
多進(jìn)程并發(fā)服務(wù)器
使用多進(jìn)程并發(fā)服務(wù)器時(shí)要考慮以下幾點(diǎn):
客戶端
#include <sys/types.h> #include <sys/socket.h> #include <stdlib.h> #include <unistd.h> #include <sys/stat.h> #include <netinet/in.h> #include <arpa/inet.h> #include <ctype.h> #include <stdio.h> #include <memory.h>#define CLIE_PORT 6666 #define CLIE_IP "118.178.192.222"int main() {char buf[BUFSIZ] = {0};struct in_addr s; // IPv4地址結(jié)構(gòu)體int cfd,ret,n;struct sockaddr_in addr;//客服端創(chuàng)建套接字cfd = socket(AF_INET,SOCK_STREAM,0);if (cfd == -1){perror("client error:");exit(1);}memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;addr.sin_port = htons(CLIE_PORT);inet_pton(AF_INET, CLIE_IP,&addr.sin_addr.s_addr);ret =connect(cfd,(struct sockaddr *)&addr,sizeof(addr));if (ret <0){perror("connect error:");exit(1);}while (1){//從終端寫入fgets(buf,sizeof(buf),stdin);write(cfd,buf,strlen(buf));n=read(cfd, buf, sizeof(buf));printf("n = %d",n);if(n==0){exit(1);}write(STDOUT_FILENO, buf, n);memset(buf, 0, sizeof(buf));}close(cfd);return 0; }總結(jié)
以上是生活随笔為你收集整理的linux网络编程(二)高并发服务器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lol改名后怎么查不了隐藏分
- 下一篇: linux知识(一) 程序、进程与线程