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

网站themes目录wordpress装饰设计主题

网站themes目录,wordpress装饰设计主题,如何用wordpress做视频网站,wordpress文章页不显示侧边套接字通信原理进程创建套接字开辟一片空间,返回套接字的文件描述符给进程,两主机的进程操控套接字文件描述符来进行发送和接收 两个套接字之间网络传输通信原理图相关函数socketint socket(int domain, int type, int protocol)功能:创建通信…

套接字通信原理

进程创建套接字开辟一片空间,返回套接字的文件描述符给进程,两主机的进程操控套接字文件描述符来进行发送和接收 两个套接字之间网络传输

通信原理图


相关函数

socket

int socket(int domain, int type, int protocol)

功能:创建通信的端点

参数:domain通信域

AF_UNIX, AF_LOCAL

本地通信

unix(7) 

AF_INET

IPv4

ip(7)

AF_INET6

IPv6

ipv6(7)

          type传输层协议类型

                SOCK_STREAM :使用的是TCP通信协议

                SOCK_DGRAM :使用UDP通信协议

    protocol指定协议:参数2有多个协议时 指定传输协议,只有一种通信方式,参数3写0即可

返回值:成功返回创建出的套接字文件描述符,最小未分配原则,失败返回-1并置位errno

bind

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)

功能:设定地址信息

sockfd要被绑定的套接字文件描述符

struct sockaddr *addr:通用地址信息结构体,主要用于强制转换,防止警告,原因是每个通信域的地址信息结构体不一定相同

用法:(struct sockaddr *)&服务端地址信息

AF_INET(ipV4):
struct sockaddr_in {
sa_family_t    sin_family; /* 协议族: AF_INET */
in_port_t      sin_port;   /* port端口字节序 */
struct in_addr sin_addr;   /* 网络地址(结构体) */
};/* Internet address. */
struct in_addr {
uint32_t       s_addr;     /* ip字节序 */
};
AF_UNIX(域套接字):
struct sockaddr_un {
sa_family_t sun_family;               /* AF_UNIX */
char        sun_path[108];            /* pathname */
};

socklen_t addrlen:就是参数2的大小

返回值:成功返回0,失败返回-1并置位错误码

listen

int listen(int sockfd, int backlog)

(sfd,超时缓冲区)

功能:将给定的套接字设置成被动监听状态,主要负责接收客户端的连接请求使用

sockfd要被设置的套接字文件描述符

backlog一次性能接收的最大客户端数量,等待队列的最大长度,一般为128

返回值:成功返回0,失败返回-1并置位错误码

accept

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)

功能:阻塞等待接收客户端连接请求后,创建新的用于通信的套接字文件描述符

sockfd用于监听的套接字文件描述符

struct sockaddr *addr用于接收客户端地址信息结构体的指针

socklen_t *addrlen用于接收客户端地址信息的长度

注意:如果不需要客户端的信息,参数2和参数3都可以填NULL

返回值:成功返回新创建的用于通信的套接字文件描述符,失败返回-1并置位错误码

connect

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)

功能:将套接字文件描述符连接到addr指向的地址空间中

sockfd客户端套接字文件描述符

const struct sockaddr *addr对端(服务端)地址信息结构体

socklen_t addrlen参数2的大小

返回值:成功返回0,失败返回-1并置位错误码

recv &send

ssize_t recv(int sockfd, void *buf, size_t len, int flags)

ssize_t send(int sockfd, const void *buf, size_t len, int flags)

功能:从套接字中接收(发送)数据到buf中

参数1:用于通信的套接字文件描述符

参数2:接收(发送)数据的容器地址

参数3:接收(发送)的数据的大小

参数4:是否阻塞接收

                0:表示阻塞接收消息

                MSG_DONTWAIT:表示非阻塞接收数据

recv返回值

                >0:表示成功读取的字符个数

                =0:表示通信对端已经下线

                =-1:表示出错,置位错误码

send返回值:成功返回发送字符的个数,失败返回-1并置位错误码

inet_addr & inet_ntoa

in_addr_t inet_addr(const char *cp)

功能:将点分十进制字符串IP地址成32位字节序

const char *cp点分十进制字符串IP

返回值:成功返回字节序,失败返回-1

char *inet_ntoa(struct in_addr in)

功能:将32位字节序点转成点分十进制字符串IP地址

struct in_addr in点分十进制字符串IP

返回值:成功返回字节序,失败返回-1


完整代码

服务端

#include <stdio.h>
#include <25061head.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/ip.h> /* superset of previous */
#define SER_PORT 8888
#define SER_IP "192.168.109.12"
int main(int argc, const char *argv[])
{		//0.创建服务器套接字文件描述符int sfd=socket(AF_INET,SOCK_STREAM,0); //ipV4网络 TCP通信方式if(sfd==-1) ERR_MSG("socket error");printf("创建成功%d\n",sfd);//端口号快速重用int reuse=-1;if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))==-1)ERR_MSG("setsockopt error");printf("设置快速重用成功\n");//1.绑定//1.1封装地址信息struct sockaddr_in sin;   sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);  //端口号转字节序sin.sin_addr.s_addr=inet_addr(SER_IP);//ip地址转字节序//1.2绑定信息if(bind(sfd,(struct sockaddr *)&sin,sizeof(sin))==-1) //参数2:需要强转成通用信息结构体ERR_MSG("bind error");printf("绑定成功%d\n",sfd);//2.监听if(listen(sfd,128)==-1)ERR_MSG("listen error");printf("监听成功%d\n",sfd);//3.接收链接请求struct sockaddr_in cin; //接收客户端的地址信息结构体    socklen_t socklen=sizeof(cin); //接收对方地址信息的长度 参数2写参数3必须写int new_fd=accept(sfd,(struct sockaddr*)&cin,&socklen);if(new_fd==-1)ERR_MSG("accept error");//将ip和端口分别转成点分十进制和无符号整型printf("%s:%d\n",inet_ntoa(cin.sin_addr)\,ntohs(cin.sin_port)); while(1){//4.接收数据char buf[128]="";ssize_t recv_num=recv(new_fd,buf,sizeof(buf)-1,0);//发生错误if(recv_num==-1) {perror("recv error");close(sfd);close(new_fd);return -1;}//对方下线else if(recv_num==0){printf("对方下线\n");close(new_fd);break;}//接收到数据printf("num=%ld recv_text=%s\n",recv_num,buf);//5.发送数据char send_buf[128]="hello hello";ssize_t send_num=send(new_fd,send_buf,strlen(send_buf),0);if(send_num==-1) ERR_MSG("send error");printf("num=%ld send_text=%s\n",send_num,send_buf);}close(sfd);return 0;
}

客户端

#include <stdio.h>
#include <25061head.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h> /* superset of previous */#define SER_PORT 8888
#define SER_IP "192.168.109.12"   
#define CER_PORT 9999
#define CER_IP "192.168.109.12"   int main(int argc, const char *argv[])
{		//创建int cfd=socket(AF_INET,SOCK_STREAM,0); if(cfd==-1) ERR_MSG("scoket error");//绑定(可选)//服务器地址信息struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);//连接if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1)ERR_MSG("connect error");while(1){//发送char buf[128]="";fgets(buf,sizeof(buf),stdin); //终端获取buf[strlen(buf)-1]=0;if(send(cfd,buf,strlen(buf),0)==-1) //发送ERR_MSG("send error");//接收recv(cfd,buf,sizeof(buf),0);printf("%s\n",buf);}close(cfd);return 0;
}

思维导图

今日刷题

http://www.dtcms.com/a/440871.html

相关文章:

  • 网站注册费用基于ssh框架的网站开发流程
  • 福州百度网站排名优化7zwd一起做网店官网
  • 全国水利建设市场信用信息平台网站做网站那个平台好
  • 佛山做外贸网站哪家好品牌全案
  • 北京网站建设价格营销型 展示类网站模板
  • 餐厅网站设计高端网站制作系统
  • asp网站咋做企业培训公司
  • 安徽省做网站wordpress弹窗表单
  • 网站排名网络推广微视看视频领红包下载安装
  • 注册企业在哪个网站vs怎么添加做网站
  • 台州网站建设企业狗和女人做的网站
  • 建网站打开需要验证深圳科技有限公司 网站建设
  • 做pc端网站价位深圳建网站 (报价)
  • 佛山网站建设公司哪家性价比高微信小程序认证入口
  • 长春鸿祥建设有限公司网站wordpress新写文章会卡死
  • 宠物用品网站建设网站外部链接怎么做
  • 2015做导航网站有哪些企业网站建设的目的
  • 查看网站用什么语言做的简洁大气企业网站模板
  • 有关网站开发的书籍wordpress 粘贴图片文档
  • python做网站稳定吗阿里云突发性能适用于做网站吗
  • 网站推广方案策划书2000网站备案备的是域名还是空间
  • 扬州建设机械网站杭州开发区网站建设
  • 网站通用样式姐姐直播tv
  • 开装潢公司做网站codeus wordpress
  • 网站开发与设计 信科阿里云备案域名
  • 哪个网站可以做水果销售代理重庆餐饮网站建设
  • 企业网站禁忌网站及邮件系统建设
  • 哪家做网站好的团购网站APP怎么做
  • 机械加工网站哪里找建站之星模板好吗
  • 公司网站html模板建筑模板是干什么用的