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

网站备案 密码找回低价格的网站建设公司

网站备案 密码找回,低价格的网站建设公司,windows清理优化大师,企业网站只用静态页目录 1、sock.h socket常用函数 网络初始化函数 首次响应函数 测试IO处理函数 获取时间函数 总代码 2、sock.c SOCKET() ACCEPT()——服务端使用这个函数等待客户端连接 CONNECT()——客户端使用这个函数连接服务端 BIND()——一般只有服务端使用 LISTEN()——服务端…目录 1、sock.h socket常用函数 网络初始化函数 首次响应函数 测试IO处理函数 获取时间函数 总代码 2、sock.c SOCKET() ACCEPT()——服务端使用这个函数等待客户端连接 CONNECT()——客户端使用这个函数连接服务端 BIND()——一般只有服务端使用 LISTEN()——服务端使用 RECV() SEND() net_initializer()——网络初始化函数 get_time()——获取时间函数 first_response()——首次适应函数 总代码 3、生成网络动态库 客户端代码 服务端代码 成功截图 1、sock.h socket常用函数 int ACCEPT(int,struct sockaddr*,socklen_t *); int SOCKET(int,int,int); ssize_t RECV(int,void*,size_t,int); int CONNECT(int, const struct sockaddr *,socklen_t); int BIND(int, const struct sockaddr *,socklen_t); int LISTEN(int, int backlog); ssize_t SEND(int, const void *, size_t, int); 网络初始化函数 int net_initializer(const char*,int,int); 首次响应函数 int first_response(client_info); 测试IO处理函数 int test_business(int); 获取时间函数 int get_time(char* tm); 总代码 #ifndef _MYSOCK_ #define _MYSOCK_ #includesys/socket.h #includearpa/inet.h #includestring.h #includenetdb.h #includeerrno.h #includetime.h #includestdio.h #endiftypedef struct {int sockfd;int port;char ip[16]; }client_info;int ACCEPT(int,struct sockaddr*,socklen_t *); int SOCKET(int,int,int); ssize_t RECV(int,void*,size_t,int); int CONNECT(int, const struct sockaddr *,socklen_t); int BIND(int, const struct sockaddr *,socklen_t); int LISTEN(int, int backlog); ssize_t SEND(int, const void *, size_t, int);int net_initializer(const char*,int,int); int first_response(client_info); int test_business(int); int get_time(char* tm); 2、sock.c SOCKET() SOCKET(socket协议域数据传输层使用协议模式指定具体的协议) int SOCKET(int domain,int type,int protocal) {int fd; if((fdsocket(domain,type,protocal))-1){perror(socket call failed);return fd; } return fd; } ACCEPT()——服务端使用这个函数等待客户端连接 ACCEPT(服务端socket客户端的网络信息结构体客户端网络信息结构体长度) ——客户端接收数据 int ACCEPT(int sockfd,struct sockaddr* addr,socklen_t * addrlen) {int fd; if((fdaccept(sockfd,addr,addrlen))-1){perror(accept call failed);return fd; } return fd; } CONNECT()——客户端使用这个函数连接服务端 客户端只有一个socket CONNECT(用于连接的socket目标信息结构体目标信息结构体长度) int CONNECT(int sockfd, const struct sockaddr *addr,socklen_t addrlen) {int fd;if((fdconnect(sockfd,addr,addrlen))-1){perror(connect call failed);return fd;}return fd; } BIND()——一般只有服务端使用 BIND(需要绑定的socket网络信息结构体的地址网络信息结构体的长度) int BIND(int sockfd, const struct sockaddr *addr,socklen_t addrlen) {int fd;if((fdbind(sockfd,addr,addrlen))-1){perror(bind call failed);return fd;}return fd; } LISTEN()——服务端使用 LISTEN(服务端socket等待连接队列的最大长度) int LISTEN(int sockfd, int backlog) {int fd;if((fdlisten(sockfd, backlog))-1){perror(listen call failed);return fd;}return fd; } RECV() RECV(套接字sockfd数据buf数据长度size选项发送的长度) 对于服务端sockfd是accept函数的返回值 对于客户端sockfd是connect函数的返回值 ssize_t RECV(int sockfd,void* buf,size_t len,int flag) {ssize_t fd; if((fdrecv(sockfd,buf,len,flag))-1){perror(recv call failed);return fd; } return fd; } SEND() SEND(发送的人的sockfd数据buf数据包长度) ssize_t SEND(int sockfd, const void *buf, size_t len, int flags) {ssize_t fd;if((fdsend(sockfd,buf,len,flags))-1){perror(send call failed);return fd;}return fd; } net_initializer()——网络初始化函数 net_initializer(ip地址端口号可以监听队列的最大长度) int net_initializer(const char* ip,int port,int backlog) {int sockfd;struct sockaddr_in addr;bzero(addr,sizeof(addr));addr.sin_familyAF_INET;addr.sin_porthtons(port);addr.sin_addr.s_addrinet_addr(82.157.31.74);sockfdSOCKET(AF_INET,SOCK_STREAM,0);BIND(sockfd,(struct sockaddr*)addr,sizeof(addr));LISTEN(sockfd,backlog);return sockfd; } get_time()——获取时间函数 get_time(时间数组) int get_time(char* tm) {bzero(tm,1024);time_t tp;tptime(NULL);ctime_r(tp,tm);tm[strlen(tm)-1]\0;return 0; } first_response()——首次适应函数 first_response(定义的结构体) client_info——定义的结构体——包含portip和创建的套接字 typedef struct {int sockfd;int port;char ip[16]; }client_info; int first_response(client_info cf) {char response[1500];bzero(response,1500);char tm[1024];get_time(tm);printf(Server,output info,client ip %s,client port %d\n,cf.ip,cf.port);SEND(cf.sockfd,response,strlen(response),MSG_NOSIGNAL);return 0; } 总代码 #includesock.hint ACCEPT(int sockfd,struct sockaddr* addr,socklen_t * addrlen) {int fd; if((fdaccept(sockfd,addr,addrlen))-1){perror(accept call failed);return fd; } return fd; }int SOCKET(int domain,int type,int protocal) {int fd; if((fdsocket(domain,type,protocal))-1){perror(socket call failed);return fd; } return fd; }ssize_t RECV(int sockfd,void* buf,size_t len,int flag) {ssize_t fd; if((fdrecv(sockfd,buf,len,flag))-1){perror(recv call failed);return fd; } return fd; }int CONNECT(int sockfd, const struct sockaddr *addr,socklen_t addrlen) {int fd;if((fdconnect(sockfd,addr,addrlen))-1){perror(connect call failed);return fd;}return fd; }int BIND(int sockfd, const struct sockaddr *addr,socklen_t addrlen) {int fd;if((fdbind(sockfd,addr,addrlen))-1){perror(bind call failed);return fd;}return fd; }int LISTEN(int sockfd, int backlog) {int fd;if((fdlisten(sockfd, backlog))-1){perror(listen call failed);return fd;}return fd; }ssize_t SEND(int sockfd, const void *buf, size_t len, int flags) {ssize_t fd;if((fdsend(sockfd,buf,len,flags))-1){perror(send call failed);return fd;}return fd; }int net_initializer(const char* ip,int port,int backlog) {int sockfd;struct sockaddr_in addr;bzero(addr,sizeof(addr));addr.sin_familyAF_INET;addr.sin_porthtons(port);addr.sin_addr.s_addrinet_addr(82.157.31.74);sockfdSOCKET(AF_INET,SOCK_STREAM,0);BIND(sockfd,(struct sockaddr*)addr,sizeof(addr));LISTEN(sockfd,backlog);return sockfd; }int get_time(char* tm) {bzero(tm,1024);time_t tp;tptime(NULL);ctime_r(tp,tm);tm[strlen(tm)-1]\0;return 0; }int first_response(client_info cf) {char response[1500];bzero(response,1500);char tm[1024];get_time(tm);printf(Server,output info,client ip %s,client port %d\n,cf.ip,cf.port);SEND(cf.sockfd,response,strlen(response),MSG_NOSIGNAL);return 0; } 3、生成网络动态库 将所有的.c或.cpp变成可重定位二进制文件载入库数据时查找可用内存而不是固定地址 生成可重定位的二进制文件.o——gcc test.c -fPIC -I头文件路径 -c gcc sock.c -I./ -fPIC -c 生成.so库——gcc xxx.o -shared -fPIC -I头文件 -o libmysock.so 共享库名线程库里为-lpthread内存中为libpthread.so gcc sock.o -shared -fPIC -I./ -o libmysock.so 生成库后需要使用-L指定库位置——gcc x.c -I头文件 -L 库路径 -lmysock -o app 如果共享库已经在默认/usr/lib位置编译时无需-L参数 查看程序所依赖的库文件查看未加载成功的库名——ldd 程序名 ldd app 将共享库.so文件复制到/usr/lib/——mv libname.so /usr/lib/ 在linux操作系统下使用ifconfig命令查看本机私有ip地址如果本机写服务器使用本机ip 成功后可以直接使用./程序名运行程序 客户端代码 #includesys/socket.h #includearpa/inet.h #includestdio.h #includestdlib.h #includeunistd.h #includestring.h#define server_ip 192.168.5.133 #define server_port 9090int main() {struct sockaddr_in client_addr;bzero(client_addr,sizeof(client_addr));client_addr.sin_family AF_INET;client_addr.sin_port htons(server_port);client_addr.sin_addr.s_addr inet_addr(server_ip);inet_pton(AF_INET,server_ip,client_addr.sin_addr.s_addr);int client_sock;if((client_socksocket(AF_INET,SOCK_STREAM,0))-1){ perror(sock create failed);return -1; } socklen_t addrlen;char recvv[1024];printf(TCP IO Client Running...\n);addrlen sizeof(client_addr);if((connect(client_sock, (struct sockaddr*)client_addr, addrlen))-1){ perror(failed);return -1; } bzero(recvv,sizeof(recvv));printf(client sock %d\n,client_sock);int lenrecv(client_sock,recvv,sizeof(recvv),0);if(len-1)perror(recv call failed);printf(len %d %s\n,len, recvv);close(client_sock); }服务端代码 #includesock.c #define server_ip 192.168.5.133 #define server_port 9090int main() {struct sockaddr_in client_addr;int server_sock;int client_sock;server_socknet_initializer(NULL,server_port,128);socklen_t addrlen;printf(TCP IO Servers Running...\n);char cip[16];ssize_t len;client_info cf;char buf[1500];char* msgPlease try again\n;char tm[1024];while(1){addrlensizeof(client_addr);client_sockACCEPT(server_sock,(struct sockaddr*)client_addr,addrlen);cf.sockfdclient_sock;inet_ntop(AF_INET,client_addr.sin_addr.s_addr,cf.ip,16);cf.portntohs(client_addr.sin_port);first_response(cf);while((lenRECV(client_sock,buf,sizeof(buf),0))0){if((strcmp(buf,time\n))0){get_time(tm);SEND(client_sock,tm,strlen(tm),MSG_NOSIGNAL);bzero(tm,sizeof(tm));}else{SEND(client_sock,msg,strlen(msg),MSG_NOSIGNAL);}bzero(buf,sizeof(buf));}if(len0){printf(client exit\n);close(client_sock);}}close(server_sock);printf(server done\n);return 0; }成功截图
http://www.hkea.cn/news/14288464/

相关文章:

  • 如何修改网站后台的用户名和密码中山网站建设方案托管
  • 短裙怎么做视频网站wordpress 中文在线字体
  • 美食网站开发的难点网络营销策划方案基本思路
  • 昭通网站建设公司动画制作专业就业前景
  • 网站主机教程南沙营销型网站建设
  • 澄江网站制作宁波seo专员
  • 电商网站建设技术网站建设谈判
  • 旅行社电商网站怎么做网站 多语
  • 电商网站春节放假通知湖南速马科技有限公司
  • 金华市建设局网站WordPress评论显示系统
  • django 做网站湖南批量出品机
  • 小程序代理模板佛山seo教程
  • 怎么做坑人的网站江苏城乡建设职业学院就业网站
  • 南京英文网站建设网站速成
  • 做网站图片格式凉山州规划和建设局网站
  • 海外购物网站排名微信群
  • qq钓鱼网站制作wordpress文章出问题
  • 淄博网站建设乐达做笑话网站需要什么
  • 兰溪企业网站搭建地址虹口基础微网站开发
  • 上海网站建设公司价格南宁云尚网络
  • 深圳市浩天建设网站seo公司是什么意思
  • 南京微信网站建设做一个中文域名购物网站要多少钱
  • wap 网站源码WordPress和哪个好用
  • 绘本借阅网站开发湛江网站定制
  • 做网站常用的背景图像短视频优化
  • 网站制作体会淮北市住房和城乡建设局网站
  • 怎样在手机上做动漫视频网站做企业网站需要人维护么
  • 积分交易网站开发wordpress内页长尾词排名
  • 建设局网站打不开是什么原因网站建设费用明细
  • 通付盾 公司网站建设濮阳建站公司流程