网络学习第四天-点对点的网络通信加强
来源:互联网 发布:飞信邮件群发软件 编辑:程序博客网 时间:2024/06/05 16:57
技术
1.socket的基本技术
2.进程的基本技术
3.信号的基本应用
话不多说,直接上我的思维图。
架构图
代码
1.服务器 ,所用技术,socket,进程,信号
#include<unistd.h>#include<sys/stat.h>#include<sys/wait.h>#include<sys/types.h>#include<stdlib.h>#include<stdio.h>#include<fcntl.h>#include<errno.h>#include<string.h>#include<signal.h>#include<arpa/inet.h>#include<sys/socket.h>#include<netinet/in.h>void handle(int num){ printf("rev num%d",num); exit(0);}int main(){ int sockfd = 0; signal(SIGUSR1,handle);//注册新号发射 sockfd = socket(PF_INET,SOCK_STREAM,0); if(sockfd == -1) { perror("socket fun is error\n"); exit(0); } struct sockaddr_in srvaddr; srvaddr.sin_family = AF_INET; srvaddr.sin_port = htons(8001); srvaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); int optval = 1; if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&optval,sizeof(optval))) { perror("setsockopt is error\n"); exit(0); } if(bind(sockfd,(struct sockaddr*)&srvaddr,sizeof(srvaddr))<0) { perror("bind func error\n"); exit(0); } //监听 if(listen(sockfd,SOMAXCONN)<0) { perror("listen fun is error\n"); exit(0); } //客户端结构体 struct sockaddr_in perraddr; socklen_t peerlen = sizeof(perraddr); unsigned int conn = 0; conn = accept(sockfd,(struct sockaddr*)&perraddr,(socklen_t*)&peerlen); if(conn == -1) { perror("conn fun error\n"); exit(0); } //打印客户端链接 printf("1111=%s\n 2222=%d\n",inet_ntoa(perraddr.sin_addr),ntohs(perraddr.sin_port)); //启动子进程 int pid = fork(); //父进程接受数据 if(pid >0) { char revbuf[1024] = {0};//接受数据数组 while(1) { int ret = read(conn,revbuf,sizeof(revbuf)); if(ret == 0) { printf("对方已经挂掉\n"); break; } else if(ret<0) { perror("读取数据失败\n"); exit(0); } fputs(revbuf,stdout); memset(revbuf,0,sizeof(revbuf));//清楚接受数据的内存重要 } close(conn); kill(pid,SIGUSR1);//杀掉子进程 sleep(1); } else { char sendbuf[1024] = {0}; while(fgets(sendbuf,sizeof(sendbuf),stdin)!=NULL) { write(conn,sendbuf,strlen(sendbuf)); memset(sendbuf,0,sizeof(sendbuf)); } } close(conn); return 0;}
2.客户端,进程和socket进行编程
#include<unistd.h>#include<sys/stat.h>#include<sys/wait.h>#include<sys/types.h>#include<fcntl.h>#include<stdlib.h>#include<stdio.h>#include<errno.h>#include<string.h>#include<signal.h>#include<arpa/inet.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>int main(){ int sockfd = 0; sockfd = socket(PF_INET,SOCK_STREAM,0); if(sockfd == -1) { perror("socket fun is error\n"); exit(0); } struct sockaddr_in srvaddr; srvaddr.sin_family = AF_INET; srvaddr.sin_port = htons(8001); srvaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); if(connect(sockfd,(struct sockaddr*)(&srvaddr),sizeof(srvaddr))<0) { perror("connect is error\n"); exit(0); } int pid = fork(); if(pid>0) { //父进程操作 char sendbuf[1024] = {0}; while(fgets(sendbuf,sizeof(sendbuf),stdin)!=NULL) { write(sockfd,sendbuf,strlen(sendbuf)); memset(sendbuf,0,sizeof(sendbuf)); } } else { char revbuf[1024]={0}; while(1) { read(sockfd,revbuf,sizeof(revbuf)); fputs(revbuf,stdout); memset(revbuf,0,sizeof(revbuf)); } } close(sockfd); return 0;}
阅读全文
0 0
- 网络学习第四天-点对点的网络通信加强
- 点对点通网络通信程序
- Winsock控件,实现网络点对点通信
- 学习javaee第四天的加强训练
- 点对点网络大解析
- c#网络点对点聊天室
- MPI学习-点对点通信
- MPI学习-点对点通信
- 网络通信学习(更新...)
- 通信网络学习笔记
- android 网络通信学习
- 学习网络通信框架
- unity 网络通信 学习
- 通信网络编程第四次作业
- 第四天 网络 handler
- Linux网络编程学习笔记-简单点对点聊天程序--6
- 【学习整理】天基移动通信网络
- 多线程的网络通信
- 博弈论学习
- 安卓 HOOK框架原理实现
- Oracle数据想做到万无一失的安全就得会这些秘密操作
- phpmailer邮件发送
- hihocoder 1326 dp OR 思维+枚举
- 网络学习第四天-点对点的网络通信加强
- win64 安装apache
- mysql数据库1045错误处理
- 二叉树面试题以及线索化二叉树
- Unity3D发布WebGL(网页)到IIS服务器并加入ASP.NET页面中
- 基于spark的网络爬虫实现
- AngularJS实战之filter的使用二
- c++ 中缀表达式转后缀表达式 计算器
- C++11中的匿名函数(lambda函数,lambda表达式)