当前位置: 首页 > news >正文

江苏建筑工程信息网站saascrm国内免费pdf

江苏建筑工程信息网站,saascrm国内免费pdf,贵阳网站建设hsyunso,在税务网站怎么做三方协议TCP 通信流程 根据上图可以看到,TCP 服务器和客户端通信分为 TCP 服务端和客户端,需要先建立服务 端然后再建立客户端与之连接进行数据交互。 服务端编程步骤: 1.使用 socket 创建流式套接字 2.使用 bind 绑定将服务器绑定到 IP 3.listen…

TCP 通信流程

        根据上图可以看到,TCP 服务器和客户端通信分为 TCP 服务端和客户端,需要先建立服务 端然后再建立客户端与之连接进行数据交互。
服务端编程步骤:
        1.使用 socket 创建流式套接字
        2.使用 bind 绑定将服务器绑定到 IP
        3.listen 监听客户端连接
        4.accept 阻塞等待客户端连接
客户端编程步骤:
        1.使用 socket 创建流式套接字
        2.connect 连接服务器
                客户端和服务器连接成功后就可以使用下面读写接口操作套接字进行通信
                读接口:read,recv,recvfrom
                写接口:write,send,sendto
连接断开时,直接使用 close 关闭套接字就行了,也可以使用 shutdown 接口关闭。

UDP 通信流程

        对于 UDP 通信,其实没有服务端和客户端之分的,反而有点类似于进程间通信一样,只需 要向对于的 IP 端去发送消息即可,上图中服务端的 bind 可有可无,它们之间进行通信的流程就是首先使用 socket 去创建一个数据包套接字用于 UDP 通信,然后就使用 sandto 进行发送消息,用 recvfrom 进行读取消息,不能使用 read 和 write 是因为 UDP 通信需要知道对方的 ip 地址的,而 read 和 write 是不具备该参数的。

TCP 通信程序简单实例

客户端程序实例:

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>void* read_ser(void *pad)
{pthread_detach(pthread_self()); //线程分离int soke_c=*(int*)pad;while (1){char buf[1024] = {0};int ret = read(soke_c,buf,1024);if(ret <= 0){perror("read error");pthread_exit(NULL);}printf("字节长度:%d,收到的信息:%s\n",ret,buf);}
}int main(int argc, char const *argv[])
{if(argc != 3) //打开失败{printf("bro,you arg not Yes\n");return -1;}/*连接服务器*/int sock = socket(AF_INET, SOCK_STREAM, 0); //申请一个 IPV4 的流式套接字if(sock == -1) //申请套接字失败{perror("create socket error");return -1;}struct sockaddr_in Saddr; //保存服务器的地址信息的结构体memset(&Saddr,0,sizeof(struct sockaddr_in)); //清空结构体Saddr.sin_family = AF_INET; //协议族,AF_INET 表示使用 IPV4 的协议族Saddr.sin_port = htons(atoi(argv[2])); //端口号,但是要求的是网络字节序Saddr.sin_addr.s_addr = inet_addr(argv[1]); //32bit 的一个 IP地址int r = connect(sock,(struct sockaddr*)&Saddr,sizeof(Saddr)); //连接服务器if(r == -1) //连接失败{perror("connect error");return -1;}printf("连接成功,连接的服务器 ip 是%s,端口号是%s\n",argv[1],argv[2]);pthread_t tid;pthread_create(&tid, NULL,read_ser, (void*)&sock); //创建线程去接收服务器消息while(1){ char buf[1024] = {0};memset(buf,0,sizeof(buf));scanf("%[^\n]",buf);printf("%ld\n",strlen(buf));int ret = write(sock,buf,strlen(buf));if(ret <= 0){perror("sendto error");return -1;}printf("写了多少个字节:%d\n",ret);}close(sock); //关闭套接字return 0;
}

服务端程序实例:

#include<stdio.h>
#include<stdlib.h>
#include <signal.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <arpa/inet.h>
#include<netinet/in.h> //为了使用 IPV4 地址结构体
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <pthread.h>//线程函数,处理和一个客户端的通信
void *my_func(void *arg)
{//线程分离pthread_detach(pthread_self());int *cp = (int *)arg;int ret;while(1){ret = sendto(*cp,"nishiliangzaima?",20,0,NULL,0); //发送消息if(ret <= 0){perror("sendto error");free(cp);pthread_exit(NULL);}char buf[1024] = {0};ret = read(*cp,buf,1024); //读取消息if(ret <= 0){perror("recv error");free(cp);pthread_exit(NULL);}printf("recv size:%d,recv data:%s\n",ret,buf);}
}//./main ip port
int main(int argc,char *argv[])
{if(argc != 3){printf("please input ip + port!\n");return 0;}//1.创建一个套接字int sockfd = socket(AF_INET, SOCK_STREAM,0);if(-1 == sockfd){perror("create socket failed");exit(-1);}//2.绑定一个通信 IP 地址(作为服务器本身的 IP)struct sockaddr_in saddr; //保存服务器的地址(IP+port)memset(&saddr,0,sizeof(struct sockaddr_in)); //清空结构体saddr.sin_family = AF_INET;inet_aton(argv[1], &saddr.sin_addr);saddr.sin_port = htons(atoi(argv[2]));int ret = bind(sockfd,(struct sockaddr *)&saddr,sizeof(saddr));if(ret == -1){perror("bind error");exit(-1);}printf("bind success\n");//3.开启对一个套接字的监听listen(sockfd,250);//4.等待客户端的连接while(1){struct sockaddr_in caddr; //保存客户端的地址(IP+port)socklen_t len = sizeof(caddr);int *confp = (int *)malloc(sizeof(int));*confp = accept(sockfd,(struct sockaddr *)&caddr,&len);if(*confp > 0) //客户端连接成功,返回一个连接套接字专门用来和客户端通信{//一个客户端连接成功.开一个进程/线程去处理这个连接printf("client IP:%s,clientPort:%d\n",inet_ntoa(caddr.sin_addr),ntohs(caddr.sin_port));pthread_t tid;pthread_create(&tid,NULL,my_func,(void *)confp); //创建线程去处理和客户端的会话}}//关闭套接字shutdown(sockfd,SHUT_RDWR);close(sockfd);return 0;
}

UDP 通信程序简单实例

A 端:客户端

#include<stdio.h>
#include<stdlib.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <arpa/inet.h>
#include<netinet/in.h> //为了使用 IPV4 地址结构体
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>//./main ip port
int main(int argc,char *argv[])
{if(argc != 3) //判断输入是否正确{printf("please input ip + port!\n");return 0;}//1.创建一个 UDP 套接字int sockfd = socket(AF_INET,SOCK_DGRAM,0); //创建一个 IPV4 的数据报套接字if(-1 == sockfd){perror("create socket failed");exit(-1);}//直接发送消息(定义一个接收消息的地址)struct sockaddr_in addr; //保存接收消息的地址(IP+port)memset(&addr,0,sizeof(struct sockaddr_in)); //清空结构体addr.sin_family = AF_INET;inet_aton(argv[1], &addr.sin_addr);addr.sin_port = htons(atoi(argv[2]));while(1){char buf[1024] = {0};fgets(buf,1024,stdin);int ret = sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)&addr,sizeof(addr));//发送数据if(ret <= 0){perror("sendto error");}printf("sendto size:%d\n",ret);//读取服务器的回复消息memset(buf,0,1024);struct sockaddr_in src_addr; //保存消息发送方的地址(IP+port)memset(&src_addr,0,sizeof(struct sockaddr_in)); //清空结构体socklen_t src_len = sizeof(src_addr); //保存可用大小ret = recvfrom(sockfd,buf,1024, 0,(struct sockaddr*)&src_addr,&src_len); //接收消息if(ret <= 0){perror("recvfrom error");}printf("sendIP:%s,sendPort:%d\n",inet_ntoa(src_addr.sin_addr),ntohs(src_addr.sin_port));printf("recv size:%d,recv data:%s\n",ret,buf);}//关闭套接字shutdown(sockfd,SHUT_RDWR);close(sockfd);return 0;
}
B 端:服务端,当然在 UDP 通信中其实没有服务端客户端之言,不过倒是可以对一端进行服务
器般的操作。
#include<stdio.h>
#include<stdlib.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <arpa/inet.h>
#include<netinet/in.h> //为了使用 IPV4 地址结构体
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>//./main ip port
int main(int argc,char *argv[])
{if(argc != 3){printf("please input ip + port!\n");return 0;}//1.创建一个 UDP 套接字int sockfd = socket(AF_INET, SOCK_DGRAM,0); //创建一个 IPV4 的数据报套接字if(-1 == sockfd){perror("create socket failed");exit(-1);}//2.绑定(可不绑定)struct sockaddr_in addr; //本地服务器的地址(IP+port)memset(&addr,0,sizeof(struct sockaddr_in)); //清空结构体addr.sin_family = AF_INET;inet_aton(argv[1], &addr.sin_addr);//addr.sin_addr.s_addr = INADDR_ANY; //让内核自动选择一个网卡addr.sin_port = htons(atoi(argv[2]));int ret = bind(sockfd,(struct sockaddr *)&addr,sizeof(addr)); //绑定一个 IP 和端口号,可不绑定if(ret == -1){perror("bind error");exit(-1);}printf("bind success\n");while(1){char buf[1024] = {0};//读取别人发送的消息struct sockaddr_in src_addr; //保存消息发送方的地址(IP+port)memset(&src_addr,0,sizeof(struct sockaddr_in)); //清空结构体socklen_t src_len = sizeof(src_addr); //保存可用大小ret = recvfrom(sockfd,buf,1024, 0,(struct sockaddr*)&src_addr,&src_len); //接收消息if(ret <= 0){perror("recvfrom error");}printf("sendIP:%s,sendPort:%d\n",inet_ntoa(src_addr.sin_addr),ntohs(src_addr.sin_port));printf("recv size:%d,recv data:%s\n",ret,buf);ret = sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)&src_addr,sizeof(src_addr)); //发送消息if(ret <= 0){perror("sendto error");}}//关闭套接字shutdown(sockfd,SHUT_RDWR);close(sockfd);return 0;
}

http://www.tj-hxxt.cn/news/53566.html

相关文章:

  • 石家庄有学校交做网站和优化的吗网络关键词排名软件
  • 个人网站网站建设数字营销公司
  • 汕头网站制作推荐海淀区seo搜索引擎
  • 网络服务系统站长之家seo综合
  • 如何利用网站模板做网站无需下载直接进入的网站的代码
  • 如何把做的网站发布到网上婚恋网站排名
  • 网站设计团队介绍全网seo是什么意思
  • 网页都有哪些抖音seo是什么意思
  • 黑龙江省建设教育信息网站百度快速收录提交工具
  • 大连模板网站制作公司seo推广教程seo高级教程
  • 厦门网站设计一般要多久太原网站排名推广
  • 网站上线前测试搜索推广渠道有哪些
  • 教育部高等学校建设中心网站外贸全网营销推广
  • 网站制作的一般步骤短视频精准获客系统
  • 政务网站优化市场营销八大营销模式
  • 中恒建设集团有限公司 网站360应用商店
  • 基于云平台网站群建设上海网络营销上海网络推广
  • 黄骅做网站的电话杭州最好的seo公司
  • 做网站 买空间网络推广的细节
  • 表示商业网站的域名泉州seo按天计费
  • 潮州市网站建设公司磁力帝
  • 个人网站建设流程图aso优化前景
  • 成都世迅网站建设简述网站建设流程
  • 网架加工厂选择徐州先禾网架聊城网站seo
  • ftp 上传网站郑州seo代理外包公司
  • 互网站开发维护成本高有哪些免费网站可以发布广告
  • 网站建设理论网站关键词推广
  • 昆明微网站哈尔滨seo服务
  • 常用动态网站开发技术有哪些网站优化设计的基础是网站基本要素及每个细节的优化
  • 和平网站建设建网站有哪些步骤