东莞网站建设 服饰网站备案 密码找回
- 作者: 五速梦信息网
- 时间: 2026年03月21日 11:22
当前位置: 首页 > news >正文
东莞网站建设 服饰,网站备案 密码找回,建湖企业做网站多少钱,注册公司都需要什么材料目录 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™-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™;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™-1]\0;return 0; }int first_response(client_info cf) {char response[1500];bzero(response,1500);char tm[1024];get_time™;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™;SEND(client_sock,tm,strlen™,MSG_NOSIGNAL);bzero(tm,sizeof™);}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; }成功截图
- 上一篇: 东莞网站建设 服饰酒店网站解决方案
- 下一篇: 东莞网站建设 环保设备宁波网上预约挂号平台
相关文章
-
东莞网站建设 服饰酒店网站解决方案
东莞网站建设 服饰酒店网站解决方案
- 技术栈
- 2026年03月21日
-
东莞网站建设 包装材料滁州网站建设哪个好点
东莞网站建设 包装材料滁州网站建设哪个好点
- 技术栈
- 2026年03月21日
-
东莞网站关键词优化收费海口模板建站定制网站
东莞网站关键词优化收费海口模板建站定制网站
- 技术栈
- 2026年03月21日
-
东莞网站建设 环保设备宁波网上预约挂号平台
东莞网站建设 环保设备宁波网上预约挂号平台
- 技术栈
- 2026年03月21日
-
东莞网站建设 拉伸膜淄博网站建设电话
东莞网站建设 拉伸膜淄博网站建设电话
- 技术栈
- 2026年03月21日
-
东莞网站建设方案企业湖南网站设计公司
东莞网站建设方案企业湖南网站设计公司
- 技术栈
- 2026年03月21日






