简单的C/S socket编程-fork子进程方式处理任务

来源:互联网 发布:saas数据库设计 编辑:程序博客网 时间:2024/05/21 07:07

Client:

#include <stdio.h>#include <stdlib.h>#include <netinet/in.h>#include <sys/types.h>#include <sys/socket.h>#include <errno.h>#include <string.h>#define SRV_PORT 9527#define MAX_BUF_LEN 1024void do_job(int);int main(int argc, char **argv){int listenfd, connfd; pid_t child_pid;struct sockaddr_in srv_addr, cli_addr;int cli_len;printf("Hello, I'm client!\r\n");listenfd = socket(AF_INET, SOCK_STREAM, 0);if (listenfd == 0){printf("socket fail, err(%s)\n", strerror(errno));return -1;}bzero(&srv_addr, sizeof(struct sockaddr_in));srv_addr.sin_family = AF_INET;srv_addr.sin_port = htons(SRV_PORT);inet_pton(AF_INET, "135.2.51.5", &srv_addr.sin_addr);connect(listenfd, (struct sockaddr *)&srv_addr, sizeof(srv_addr));do_job(listenfd);return 0;}void do_job(int fd){char *buf = "I'm client";char buf2[MAX_BUF_LEN];ssize_t len;bzero(buf2, MAX_BUF_LEN);if (0 > write(fd, "I'm client", strlen(buf)+1)){printf("write failed\n");return;}if (-1 == read(fd, buf2, MAX_BUF_LEN)){printf("read failed]\n");return;}close(fd);printf("read from server:%s",buf2);}

Server:

#include <stdio.h>#include <stdlib.h>#include <netinet/in.h>#include <sys/types.h>#include <sys/socket.h>#include <errno.h>#include <string.h>#define SRV_PORT 9527#define LISTEN_LEN 5#define MAX_BUF_LEN 1024void do_job(int);int main(int argc, char **argv){int listenfd, connfd; pid_t child_pid;struct sockaddr_in srv_addr, cli_addr;int cli_len;printf("Hello, I'm server!\r\n");listenfd = socket(AF_INET, SOCK_STREAM, 0);if (listenfd == 0){printf("socket fail, err(%s)\n", strerror(errno));return -1;}bzero(&srv_addr, sizeof(struct sockaddr_in));srv_addr.sin_family = AF_INET;srv_addr.sin_addr.s_addr = htonl(INADDR_ANY);srv_addr.sin_port = htons(SRV_PORT);if (0 != bind(listenfd, (struct sockaddr*)&srv_addr, sizeof(srv_addr))){printf("bind fail, err(%s)\n", strerror(errno));close(listenfd);return -1;}if (0 != listen(listenfd, LISTEN_LEN)){printf("listen fail, err(%s)\n", strerror(errno));close(listenfd);return -1;}while (1){connfd = accept(listenfd, (struct sockaddr*)&cli_addr, &cli_len);if (-1 == connfd){printf("accept fail, err(%s)\n", strerror(errno));close(listenfd);return -1;}if ((child_pid = fork()) == 0){close(listenfd);do_job(connfd);//close(connfd);exit(0);}close(connfd);}return 0;}void do_job(int fd){char buf[MAX_BUF_LEN];ssize_t len;bzero(buf, MAX_BUF_LEN);len = read(fd, buf, MAX_BUF_LEN);if (len < 0){printf("read failed\n");return;}printf("recv from client:%s\n", buf);if (-1 == write(fd, "hello, welcome to my server \r\n", 32)){printf("write failed]\n");return;}}


0 0
原创粉丝点击