涉及到一些网络编程的基本概念,这里不做解释。
重点集中在用多进程实现,并且两次fork避免僵尸进程。主进程负责监听,孙进程负责与客户端交流。
实现的功能很简单,客户端连接成功后,输入一个整数,服务端返回它的二进制形式。客户端输入0,则主动退出。
服务端代码:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <signal.h>
#include <sys/wait.h>
#include <stdlib.h>
#define PORT 6666
#define SIZE 50
int Create_socket() //创建套接字和初始化以及监听函数
{
int listen_socket = socket(AF_INET, SOCK_STREAM, 0); //创建一个套接字
if(listen_socket == -1)
{
perror("socket");
return -1;
}
struct sockaddr_in addr;
bzero(&addr,sizeof(addr));
addr.sin_family = AF_INET; //Internet地址族
addr.sin_port = htons(PORT); //端口号,htons将主机字节序转为网