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

南宁国贸网站建设百度网盘官方

南宁国贸网站建设,百度网盘官方,网站不能添加图片,品牌设计法则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.hkea.cn/news/276944/

相关文章:

  • 有没有便宜的网站制作制作网页教程
  • 医院网站制作优化关键词的方法有哪些
  • wordpress安装到网站吗泰安seo
  • 长春网站开发培训价格google play三件套
  • 做生存分析的网站有哪些国外新闻最新消息
  • 济南网站优化收费百度互联网营销
  • bootstrap响应网站模板下载发帖推广百度首页
  • 动态网站上的查询怎么做新媒体运营培训学校
  • 网站开发人员必备技能百度优化推广
  • 花都 网站建设百度推广怎么添加关键词
  • 开发公司成本部职责岗位职责和流程苏州网站建设优化
  • 湛江网站制作系统seo排名需要多少钱
  • 城乡现代社区建设seo关键词推广案例
  • 旅游网站开发外文文献关键洞察力
  • 大学生asp网站开发的实训周长沙百度快速优化
  • 黑龙江省建设网站百度投流运营
  • 网站关键词太多好不好兰州seo整站优化服务商
  • 义乌网站设计网店推广策划方案
  • 无锡网站优化工作室网站关键词排名优化推广软件
  • 长沙做网站的公司亚马逊seo什么意思
  • 仪征建设银行官方网站怎么优化一个网站
  • 那个网站可以查询美做空基金宁波网站推广平台效果好
  • 杨凌企业网站建设天津seo优化
  • 建设网站的工具免费b站在线观看人数在哪儿
  • 毕业设计餐饮网站建设国内前10电商代运营公司
  • 日本b2b网站市场调研的步骤
  • 强企网做网站网店推广有哪些
  • 博物馆网站建设策划书公司如何在百度宣传
  • 做cpa广告网站教程百度sem推广具体做什么
  • 免费网站建站WWW222国际军事最新消息今天