netstat -nltp
无法用read函数读取UDP套接字的数据,因为UDP是面向数据报,而TCP是面向数据流。
客户端不需要 bind,listen,accept,但是客户端需要connect,connect会自动做bind工作。
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int inet_aton(const char *cp, struct in_addr *inp);//cp必须是点分十进制字符串
把“192.168.1.1”这样的点分十进制字符串转换成struct sockaddr_in结构体里面的in_addr结构体(网络序列)。已知in_addr结构体里面只有一个成员,一个32位无符号整数。
成功返回0,失败返回-1;
使用方法:
客户端的端口号要操作系统随机分配,防止客户端出现启动冲突。
使用signal(SIGCHLD, SIG_IGN)处理僵尸进程
通过signal(SIGCHLD, SIG_IGN)通知内核对子进程的结束不关心,由内核回收。如果不想让父进程挂起,可以在父进程中加入一条语句:signal(SIGCHLD,SIG_IGN);表示父进程忽略SIGCHLD信号,该信号是子进程退出的时候向父进程发送的。
//多进程版本成本高,
//多线程版本(效率低,当有大量客户端同时连接,服务器还得一个一个创建线程)
//线程池版本