#include <iostream>
#include <unistd.h>
#include <cstdlib>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <signal.h>
#include <string> using namespace std; const int BUFFER_SIZE = ; void read_child_proc(int sig)
{
int status = ;
waitpid(-, &status, WNOHANG);
} int deal_error(string error_msg)
{
cout << error_msg << endl;
return ;
} int main()
{
// 创建套接字
int ser_sock = socket(PF_INET, SOCK_STREAM, );
if (ser_sock == -) {
return deal_error("socket() failed");
} // 套接字绑定ip及端口号
sockaddr_in ser_addr;
ser_addr.sin_family = AF_INET;
ser_addr.sin_addr.s_addr = htonl(INADDR_ANY);
ser_addr.sin_port = htons();
if (bind(ser_sock, (sockaddr *)&ser_addr, sizeof(ser_addr)) == -) {
close(ser_sock);
return deal_error("bind() failed");
} // 开始监听
if (listen(ser_sock, ) == -) {
close(ser_sock);
return deal_error("listen() failed");
} // 注册信号
signal(SIGCHLD, read_child_proc); // 子进程执行结束信号注册,防止僵尸进程产生
signal(SIGINT, exit); // CTRL+C信号注册,退出程序 while() {
sockaddr_in clnt_addr;
socklen_t addr_length = sizeof(clnt_addr);
int clnt_sock = accept(ser_sock, (sockaddr *)&clnt_addr, &addr_length);
if (clnt_sock == -) {
continue;
} cout << "new client connected: " << clnt_sock << endl;
pid_t pid = fork();
if (pid < ) {
continue;
} else if (pid == ) { // 子进程
close(ser_sock);
char message[BUFFER_SIZE];
int str_len = read(clnt_sock, message, BUFFER_SIZE-);
if (str_len > ) {
message[str_len] = '\0';
cout << message << endl;
}
close(clnt_sock);
sleep();
return ;
} else { // 父进程
close(clnt_sock);
}
} close(ser_sock);
return ;
}

最新文章

  1. Xamarin与Visual stuido2015离线安装包分享
  2. Tensorflow mlp二分类
  3. ajax同步的实现
  4. Linux 忘记root密码 的解决办法
  5. 在Ubuntu上为Android系统内置Java应用程序测试Application Frameworks层的硬件服务(老罗学习笔记6)
  6. 四、使用Maven和使用Eclipse构建javaWeb项目
  7. 宏定义 define
  8. MyEclipse 中文注释乱码
  9. response重定向的网址中有中文乱码的解决办法
  10. 解决 CentOS7 安装完成后ifconfig命令不能用
  11. Java编程的逻辑 (87) - 类加载机制
  12. Intel Digital Innovation Industry Summit(2018.08.17)
  13. How to uninstall Maya on a Mac
  14. InnoDB表回收空间
  15. 利用 Azure Devops 创建和发布 Nuget 包
  16. 第9月第6天 push pop动画 生成器模式(BUILDER)
  17. SVN的Hooks功能--强制添加注释
  18. 时间操作(JavaScript版)—年月日三级联动(默认显示系统时间)
  19. OpenStack入门篇(二十)之实现阿里云ESC多FLAT网络
  20. SSIS 数据流的执行树和数据管道

热门文章

  1. SQL Server带列名导出到Excel(Export to CSV with headers)的几个思路
  2. 线性筛-mobius,强大O(n)
  3. springboot jar文件打zip包运行linux环境中
  4. js中yyyymmdd hh:mm:ss字符转换为Date
  5. Springboot项目搭建(3)-shiro登录
  6. Linux03——磁盘分区和挂载
  7. 开学考试学生成绩管理Java
  8. UTC/GMT/CST/RTC
  9. 黑帽JS跳转
  10. 点击&lt;a href=&quot;#&quot;&gt;阻止自动跳转到顶部方法