您现在的位置是:主页 > news > WordPress能连接支付端口吗/清远网站seo
WordPress能连接支付端口吗/清远网站seo
admin2025/6/20 21:33:44【news】
简介WordPress能连接支付端口吗,清远网站seo,如何做淘宝直播教学视频网站,乐山高端网站建设文章目录一、实现思路1、服务器2、客户端二、详细代码1、服务器2、客户端三、测试一、实现思路 1、服务器 socket(); //设置套接字 bind(); //绑定服务器 listen(); //设置监听上限 fd_set reset, allset; //创建“读”监听集合 FD_ZERO (&allset); // 将“读”监听…
文章目录
- 一、实现思路
- 1、服务器
- 2、客户端
- 二、详细代码
- 1、服务器
- 2、客户端
- 三、测试
一、实现思路
1、服务器
socket(); //设置套接字
bind(); //绑定服务器
listen(); //设置监听上限
fd_set reset, allset; //创建“读”监听集合
FD_ZERO (&allset); // 将“读”监听集合清空
FD_SET (lfd, &allset); //将lfd添加至读集合种.
while (1){rest = allset; //保存读监听集合ret = select (MAXFD+1, &rset, NULL, NULL, NULL); //监听文件描述符集合对应的事件,这里只监听“读”事件。if (ret > 0) {if (FD_ISSET (lfd, &rset)){cfd = accept(); //建立连接,返回cfdFD_SET (cfd, &allset); //将新的cfd描述符添加到读集合中}}for (i = lfd + 1; i <= 最大文件描述符; i++){FD_ISSET (i, &rset);read ();//用户自定义功能write ();}
}
-
selcet 解析
1)所需头文件:
#include <sys/types.h>
#include <sys/times.h>
#include <sys/select.h>2)函数原型:
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set * exceptfds, struct timeval *timeout)nfds:select监视的文件句柄数,视进程中打开的文件数而定,一般设为你要监视各文件中的最大文件号加一。(注:nfds并非一定表示监视的文件句柄数。官方文档仅指出nfds is the highest-numbered file descriptor in any of the three sets, plus 1. (可在linux环境中通过man select命令查得))
readfds:select监视的可读文件句柄集合。
writefds: select监视的可写文件句柄集合。
exceptfds:select监视的异常文件句柄集合。
timeout:本次select()的超时结束时间。设置为NULL时,select阻塞监听。
返回值:-1出错;等于0或大于0,返回监听集合中,满足对应事件的总数。
注意:第二、三、四参数,3)优点
跨平台:windows、linux、macos、unix、类unix、mips…4)缺点
①监听上限受文件描述符限制,最大1024.
②检测满足条件的fd,需要自己编码,编码难度不小。
2、客户端
1)socket() 创建socket。
2)connect() 与服务器建立连接。
3)write() 写数据到socket的写缓冲,将数据发送到服务器。
4)read() 读数据。
5)显示读取结果。
6)close() 关闭fd。
二、详细代码
1、服务器
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <arpa/inet.h>
#include <ctype.h>
#include "warp.h"#define PORT 666 //端口
#define MAX_LISTEN 128 //监听上限
int main (void)
{printf ("hello\n");int lfd, cfd;struct sockaddr_in ser_addr, clt_addr;socklen_t addr_len;char addr_buf[INET_ADDRSTRLEN];lfd = Socket (AF_INET, SOCK_STREAM, 0); //创建套接字int opt = 1;setsockopt (lfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof (opt)); //端口复用bzero (&ser_addr, sizeof (ser_addr)); //结构体清零ser_addr.sin_family = AF_INET;ser_addr.sin_addr.s_addr = htonl (INADDR_ANY);ser_addr.sin_port = htons (PORT);Bind (lfd, (struct sockaddr*)&ser_addr, sizeof (ser_addr)); //绑定服务器printf ("host ip: %s\n", inet_ntop(AF_INET, &ser_addr.sin_addr, addr_buf, sizeof(addr_buf)));Listen (lfd, MAX_LISTEN); //设置监听上限fd_set rset, allset; //创建 读监听集合int sockfd;int client[FD_SETSIZE]; //用于记录连接成功的cfdint maxfd;int maxi;int nready;int i,n;char buf[256] = {0};int read_len;FD_ZERO (&rset);FD_ZERO (&allset);FD_SET (lfd, &allset);maxfd = lfd;maxi = -1;for (i=0; i<FD_SETSIZE; i++) //初始化为-1,表示全为空client[i] = -1;while (1){rset = allset; nready = select (maxfd + 1, &rset, NULL, NULL, NULL); //nready,接收满足对应读事件的总数.if (nready < 0)PERROR ("select");if (FD_ISSET (lfd, &rset)) //判断是否有客户端请求连接{addr_len = sizeof (clt_addr);cfd = Accept (lfd, (struct sockaddr*)&clt_addr, &addr_len); //这里的accept不会阻塞,因为有连接请求事件被触发,它才会进入此分支。printf ("access network IP:%s prot:%d\n", inet_ntop(AF_INET, &clt_addr.sin_addr,addr_buf, sizeof(addr_buf)),ntohs(clt_addr.sin_port));for (i=0; i<FD_SETSIZE; i++) //寻找client的空位置if (client[i] == -1) {client[i] = cfd;break;}if (i == FD_SETSIZE){ //如果满了(等于1024),提示错误,退出程序fputs ("too many clients\n", stderr);exit (1);}FD_SET (cfd, &allset);if (cfd > maxfd)maxfd = cfd;if (i > maxi)maxi = i;if (--nready == 0) //如果满足事件数量为1,则返回select处继续等待事件;如果满足事件数量为大于1,则进行往下执行for循环,说明还有其它事件被触发。continue;}for (i=0; i <= maxi; i++) {if ((sockfd = client[i]) < 0) //client为-1的不处理continue;if (FD_ISSET (sockfd, &rset)) //实现大小写转换{read_len = Read (sockfd, buf, sizeof(buf));if (read_len == 0) //说明客户端断开{Close (sockfd);FD_CLR (sockfd, &allset); client[i] = -1;}else if (read_len > 0) //读到客户端发来的数据{for (n=0; n < read_len; n++)buf[n] = toupper (buf[n]);printf ("%s",buf);memset (buf, '\0', sizeof (buf));}if (--nready == 0)break;}}}Close (lfd);return 0;}
2、客户端
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <errno.h>
#include "warp.h"#define SEVR_PORT 666int main (void)
{int cfd;struct sockaddr_in serv_addr;int count = 10;char buf[1024] = {0};cfd = Socket (AF_INET, SOCK_STREAM, 0);serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons (SEVR_PORT);inet_pton (AF_INET, "127.0.0.1", &serv_addr.sin_addr.s_addr);Connect (cfd, (struct sockaddr *)&serv_addr, sizeof (serv_addr));while (count--){int ret = 0 ;write (cfd, "i love u\n", 9);ret = read (cfd, buf, strlen (buf));//write (STDOUT_FILENO, buf, ret);printf ("%s", buf);sleep (1);}close (cfd);return 0;
}