本例实现如下功能:
服务端接收来自客户端发送过来的字符串,将小写转换为大写后发送回客户端。
其中,每一个新客户端连接后,服务端主进程为此客户端创建一个子进程进行数据的处理。
多进程并发服务端代码:
/*server.c*/
#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/socket.h>
#define BUFSIZE 666
#define SERV_PORT 8888
int main()
{
struct sockaddr_in servaddr, cliaddr;
socklen_t cliaddr_len;
int listenfd, connfd;
char buf[BUFSIZE];
char str[INET_ADDRSTRLEN];
int i, n;
pid_t pid;
listenfd = socket(AF_INET, SOCK_STREAM, 0); //打开一个网络通讯端口,分配一个文件描述符listenfd
bzero(&servaddr, sizeof(servaddr)); //清空服务端套接字
servaddr.sin_family = AF_INET; //地址采用IPv4地址
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//地址从主机字节顺序转换成网络字节顺序
servaddr.sin_port = htons(SERV_PORT); //端口号从主机字节顺序转换成网络字节顺序