您的位置:首页 > 房产 > 家装 > 自己在线制作图片免费下载_网富公司收费大概多少钱_营销网络推广方式有哪些_南宁网站建设服务公司

自己在线制作图片免费下载_网富公司收费大概多少钱_营销网络推广方式有哪些_南宁网站建设服务公司

2025/4/25 2:30:22 来源:https://blog.csdn.net/weixin_62330993/article/details/147171265  浏览:    关键词:自己在线制作图片免费下载_网富公司收费大概多少钱_营销网络推广方式有哪些_南宁网站建设服务公司
自己在线制作图片免费下载_网富公司收费大概多少钱_营销网络推广方式有哪些_南宁网站建设服务公司

1、UDP编程

服务端:
#include<stdio.h>
#include <arpa/inet.h>
#include<stdlib.h>
#include<string.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <pthread.h>
#include <strings.h>
#define QUIT_STR "QUIT"
#define SERV_PORT 5001
#define SERV_IP_ADDR "192.168.238.128" 
#define bufsize 1024int main()
{int fd =-1;//1.socketfd = socket(AF_INET,SOCK_DGRAM,0);if(fd ==-1){perror("socket\n");exit(1);}//2.addrint b_reuser=1;setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&b_reuser,sizeof(int));//3.bindstruct sockaddr_in sin;bzero(&sin,sizeof(sin));sin.sin_family = AF_INET;sin.sin_port = htons(SERV_PORT);sin.sin_addr.s_addr = htonl(INADDR_ANY);if(bind(fd,(struct sockaddr*)&sin,sizeof(sin))<0){perror("bind");exit(1);}	char buf[bufsize];//4.recvfromstruct sockaddr_in cin;socklen_t addrlen=sizeof(cin);while(1){bzero(buf,bufsize);if(recvfrom(fd,buf,bufsize-1,0,(struct sockaddr*)&cin,&addrlen)<0){perror("recvfrom\n");continue;}char ipv4_addr[16];if(!inet_ntop(AF_INET,(void*)&cin.sin_addr,ipv4_addr,sizeof(cin))){perror("inet_ntop");exit(1);}printf("recvive from (%s,%d),data:%s\n",ipv4_addr,ntohs(cin.sin_port),buf);if(!strncasecmp(buf,QUIT_STR,strlen(QUIT_STR))){printf("cilent:(%s,%d)\n",ipv4_addr,ntohs(cin.sin_port));}}close(fd);return 0;
}
客户端
#include<stdio.h>
#include <arpa/inet.h>
#include<stdlib.h>
#include<string.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <pthread.h>
#include <strings.h>
#define QUIT_STR "QUIT"
#define SERV_PORT 5001
#define SERV_IP_ADDR "192.168.238.128" 
#define bufsize 1024int main(int argc,char** argv)
{if(argc!=3){exit(1);}int port=-1;port=atoi(argv[2]);int fd =-1;//1.socketfd = socket(AF_INET,SOCK_DGRAM,0);if(fd ==-1){perror("socket\n");exit(1);}struct sockaddr_in sin;bzero(&sin,sizeof(sin));sin.sin_family = AF_INET;sin.sin_port = htons(port);sin.sin_addr.s_addr = inet_addr(argv[1]);char buf[bufsize];//sendwhile(1){bzero(buf,bufsize);if(fgets(buf,bufsize-1,stdin) == NULL){perror("fgets");continue;}sendto(fd,buf,bufsize-1,0,(struct sockaddr*)&sin,sizeof(sin));if(!strncasecmp(buf,QUIT_STR,strlen(QUIT_STR))){perror("strncasecmp");exit(1);}}close(fd);return 0;
}

运行结果:

2、IO多路复用

服务端:
#include<stdio.h>
#include <arpa/inet.h>
#include<stdlib.h>
#include<string.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <pthread.h>
#include <strings.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <unistd.h>
#define QUIT_STR "QUIT"
#define SERV_RESP_STR "SERVER:"
#define SERV_IP 5001
#define SERV_IP_ADDR "192.168.238.128" 
#define bufsize 1024
void child_data_handle(int signum)
{if(SIGCHLD==signum){waitpid(-1,NULL,WNOHANG);}
}
void* cilent_data_handle(void* arg)
{int newfd=*(int *)arg;char respbuf[bufsize];char buf[bufsize];printf("child process handle:newfd = %d\n",newfd);int ret =-1;while(1){do{bzero(buf,bufsize);ret=read(newfd,buf,bufsize-1);}while(ret<1);if(ret<0){exit(1);}if(!ret){break;}printf("recive data is %s\n",buf);bzero(respbuf,bufsize-1);strncpy(respbuf,SERV_RESP_STR,strlen(SERV_RESP_STR));strcat(respbuf,buf);do{ret =write(newfd,respbuf,strlen(respbuf));}while(ret<0);if(!strncasecmp(buf,QUIT_STR,strlen(QUIT_STR))){printf("cilenr is exiting!\n");break;}}close(newfd);}
int main()
{int fd=-1;signal(SIGCHLD,child_data_handle);fd=socket(AF_INET,SOCK_STREAM,0);if(fd == -1){perror("socket");exit(1);}struct sockaddr_in sin;bzero(&sin,sizeof(sin));sin.sin_family=AF_INET;sin.sin_port = htons(SERV_IP);sin.sin_addr.s_addr = INADDR_ANY;
/*	if(inet_pton(AF_INET,SERV_IP_ADDR,(void*)&sin.sin_addr.s_addr)!=1){perror("inet_pton");exit(1);}*///2.bindif(bind(fd,(struct sockaddr *)&sin,sizeof(sin))<0){perror("bind");exit(1);	   }//3.listenif(listen(fd,5)<0){perror("listen");exit(1);}//4.accepint newfd=-1;pthread_t tid;pid_t pid;struct sockaddr_in cin;socklen_t addrlen=sizeof(cin);while(1){newfd= accept(fd,(struct sockaddr*)&cin,&addrlen);if(newfd<0){perror("accept");exit(1);}pid = fork();if(pid<0){perror("fork");break;}if(pid == 0){char IPV4_addr[16];if(!inet_ntop(AF_INET,(void *)&cin.sin_addr,IPV4_addr,sizeof(cin))){perror("inet_ntop");exit(1);}printf("cilent:(%s,%d)is connect\n",IPV4_addr,ntohs(cin.sin_port));cilent_data_handle(&newfd);close(fd);}if(pid >0){close(newfd);}}//readreturn 0;
}
客户端:
#include<stdio.h>
#include <arpa/inet.h>
#include<stdlib.h>
#include<string.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <pthread.h>
#include <strings.h>
#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#define SERV_RESP_STR "SERVER:"
#define QUIT_STR "QUIT"
#define SERV_PORT 5001
#define SERV_IP_ADDR "192.168.238.128" 
#define bufsize 1024int main(int argc,char** argv)
{if(argc!=3){exit(1);}int port=-1;port=atoi(argv[2]);int fd =-1;//1.socketfd = socket(AF_INET,SOCK_STREAM,0);if(fd ==-1){perror("socket\n");exit(1);}struct sockaddr_in sin;bzero(&sin,sizeof(sin));sin.sin_family = AF_INET;sin.sin_port = htons(port);sin.sin_addr.s_addr = inet_addr(argv[1]);if(connect(fd,(struct sockaddr*)&sin,sizeof(sin))<0){perror("connect");exit(1);}fd_set rset;int maxfd =-1;char buf[bufsize];int ret =-1;struct timeval tout;while(1){FD_ZERO(&rset);FD_SET(0,&rset);FD_SET(fd,&rset);maxfd = fd;tout.tv_sec = 5;tout.tv_usec = 0;select(maxfd+1,&rset,NULL,NULL,&tout);if(FD_ISSET(0,&rset)){bzero(buf,bufsize);do{ret = read(0,buf,bufsize-1);}while(ret<0);if(ret<0){perror("read");continue;}if(!ret){continue;}if(write(fd,buf,strlen(buf))<0){perror("write");continue;}if(!strncasecmp(buf,QUIT_STR,strlen(QUIT_STR))){printf("cilent is exited!\n");break;}}if(FD_ISSET(fd,&rset)){bzero(buf,bufsize);do{ret = read(fd,buf,bufsize-1);}while(ret<0);if(ret<0){perror("read");continue;}if(!ret){break;}printf("service said:%s\n",buf);if((strlen(buf)>strlen(SERV_RESP_STR))    &&     (!strncasecmp(buf,QUIT_STR,strlen(QUIT_STR)))){printf("cilent is exited!\n");break;}}}/*	char buf[bufsize];//sendwhile(1){bzero(buf,bufsize);if(fgets(buf,bufsize-1,stdin) == NULL){perror("fgets");continue;}sendto(fd,buf,bufsize-1,0,(struct sockaddr*)&sin,sizeof(sin));if(!strncasecmp(buf,QUIT_STR,strlen(QUIT_STR))){perror("strncasecmp");exit(1);}}*/close(fd);return 0;
}

运行结果:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com