客户端见UNIX网络编程,简易客户端及服务端(socket)
并发式服务器可理解为父进程fork一个子进程,然后将需要执行的操作交给子进程,父进程继续监听。
#include<sys/socket.h>
#include<bits/types.h>
#define SA struct sockaddr
#define MAXLINE 4096
#define LISTENQ 1024
#define bzero(ptr,n) memset(ptr,0,n)
int main()
{
int pid;
int listenfd,connfd;
struct sockaddr_in servaddr;
char buff[MAXLINE];
time_t ticks;
listenfd = socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(3500);
bind(listenfd,(SA *) &servaddr,sizeof(servaddr));
listen(listenfd,LISTENQ);
for(;;){
connfd = accept(listenfd,(SA *)NULL,NULL);
if((pid = fork()) == 0){
close(listenfd);
ticks = time(NULL);
snprintf(buff,sizeof(buff),"%.24s\r\n",ctime(&ticks));
write(connfd,buff,strlen(buff));
close(connfd);
exit(0);
}
close(connfd);
}
}
验证是否成功时我们可以在server代码中加一个while()循环(如:一直打印server时间),然后起多个终端同时去访问服务端,看是否正常运行。