网络编程2.0
Posted it8343
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程2.0相关的知识,希望对你有一定的参考价值。
代码1:服务器端:
1 #include "common.h" 2 typedef struct stu 3 { 4 int id; 5 char name[20]; 6 int score; 7 struct stu *next; 8 }Stu,*PStu; 9 10 void fun(int sig) 11 { 12 printf("连接中断 "); 13 return; 14 } 15 unsigned int ListLength(PStu ptr) //计算链表长度 16 { 17 unsigned int l=0; 18 while(ptr!=NULL) 19 { 20 l++; 21 ptr=ptr->next; 22 } 23 return l; 24 } 25 PStu ListSort(PStu ptr) //链表排序 26 { 27 PStu sorthead=NULL;//创建头指针指向空 28 unsigned int l=ListLength(ptr); 29 while(l>0) 30 { //循环找出最大值 31 PStu p1=ptr; 32 PStu p2=p1; 33 int max=p1->score; 34 while(p1!=NULL) 35 { 36 if(p1->score>max) 37 {max=p1->score; p2=p1;} 38 p1=p1->next; 39 } 40 PStu p3=ptr; 41 if (p3==p2) 42 ptr=p3->next;//第一个为最大值时,删除最大值。 43 else 44 { while(p3->next!=p2) 45 p3=p3->next;//定位到最大值节点p2前面一个节点 46 47 p3->next=p2->next;//(删除最大值) 48 } 49 50 PStu r;// 后插法,由大到小 51 p2->next=NULL; 52 if(sorthead==NULL) 53 sorthead=p2; 54 else 55 r->next=p2; 56 57 r=p2; 58 l--; 59 } 60 return sorthead; 61 } 62 void show(PStu head)//打印函数 63 { 64 printf("学号 姓名 分数 "); 65 while(head!=NULL) 66 { 67 printf("%d %s %d ",head->id,head->name,head->score); 68 head=head->next; 69 } 70 return ; 71 } 72 void *thread(void *agv)//打印所接受到的信息(子线程) 73 { 74 PStu head=NULL; 75 Stu *ptr; 76 PStu r; 77 int nfd; 78 int ret; 79 nfd=(int)agv;//接收传参nfd 80 81 signal(SIGPIPE,fun); 82 printf("read... "); 83 while(1) 84 { 85 ptr=malloc(sizeof(Stu)); 86 ret=read(nfd,ptr,sizeof(Stu)); 87 if(ret<0) 88 { 89 perror("read");break; 90 } 91 if(ret==0) 92 { 93 head=ListSort(head); 94 show(head); 95 printf("read over "); 96 break; 97 } 98 if(ret>0);//把链表读出来 99 { 100 ptr->next=NULL; 101 if(head==NULL) 102 { 103 head=ptr; 104 } 105 else 106 { 107 r->next=ptr; 108 } 109 r=ptr; 110 } 111 } 112 return NULL; 113 } 114 115 int main()//主线程,一直工作,接收客户端 116 { 117 PStu head=NULL; 118 pthread_t pthid; 119 int ret; 120 int fd,nfd; 121 struct sockaddr_in saddr,caddr; 122 int addr_len; 123 signal(SIGPIPE,fun); 124 fd = socket(AF_INET,SOCK_STREAM,0); 125 if(fd<0) 126 { 127 perror("socket"); 128 return -1; 129 } 130 saddr.sin_family = AF_INET; 131 saddr.sin_port = htons(9000); 132 inet_pton(AF_INET,"192.168.6.128",&saddr.sin_addr.s_addr); 133 ret = bind(fd,(struct sockaddr*)&saddr,sizeof(saddr)); 134 if(ret<0) 135 { 136 perror("bind"); 137 goto END; 138 } 139 ret = listen(fd,20); 140 if(ret<0) 141 { 142 perror("listen"); 143 goto END; 144 } 145 addr_len = sizeof(caddr); 146 while(1)//循环接收多个客户端 147 { 148 printf("accept.. "); 149 nfd = accept(fd,(struct sockaddr*)&caddr,&addr_len); 150 if(nfd<0) 151 { 152 perror("accept"); 153 } 154 printf("accept over.. "); 155 ret=pthread_create(&pthid,NULL,thread,(void*)nfd); 156 } 157 close(nfd);pthread_join(pthid,NULL); 158 END: 159 close(fd); 160 return 0; 161 }
代码2:客户端(主要是创建连接、发送数据)
1 #include"common.h" 2 3 typedef struct stu 4 { 5 int id; 6 char name[20]; 7 int score; 8 struct stu *next; 9 }Stu,*PStu; 10 11 void create_list(PStu *phead) 12 { 13 *phead=NULL; 14 PStu ptr,r; 15 int id,score; 16 char name[20]; 17 printf("当id为0时结束添加 "); 18 printf("id="); 19 scanf("%d",&id);getchar(); 20 while(id>0) 21 { 22 printf("name="); 23 scanf("%s",name);getchar(); 24 printf("score="); 25 scanf("%d",&score);getchar(); 26 ptr=malloc(sizeof(Stu)); 27 ptr->id=id; 28 ptr->score=score; 29 strcpy(ptr->name,name); 30 ptr->next=NULL; 31 if(*phead==NULL) 32 { 33 *phead=ptr; 34 } 35 else 36 { 37 r->next=ptr; 38 } 39 r=ptr; 40 41 printf("当id为0时结束添加 "); 42 printf("id="); 43 scanf("%d",&id);getchar(); 44 } 45 46 return ; 47 48 } 49 50 void show(PStu head) 51 { 52 while(head!=NULL) 53 { 54 printf("%d %s %d ",head->id,head->name,head->score); 55 head=head->next; 56 } 57 return; 58 } 59 60 void fun() 61 { 62 printf("链接中断 "); 63 return; 64 } 65 66 int main() 67 { 68 // show(head); 69 int fd; 70 int ret; 71 struct sockaddr_in saddr; 72 signal(SIGPIPE,fun); 73 fd=socket(AF_INET,SOCK_STREAM,0); 74 if(fd<0) 75 { 76 perror("socket"); 77 return -1; 78 } 79 saddr.sin_family=AF_INET; 80 saddr.sin_port=htons(9000); 81 82 inet_pton(AF_INET,"192.168.6.128",&saddr.sin_addr.s_addr); 83 84 ret = connect(fd,(struct sockaddr*)&saddr,sizeof(saddr)); 85 if(ret<0) 86 { 87 perror("connect"); 88 goto END; 89 } 90 PStu head=NULL; 91 create_list(&head); 92 PStu p=head; 93 for(;p!=NULL;p=p->next) 94 { 95 ret = write(fd,p,sizeof(Stu)); 96 // printf("123"); 97 98 if(ret<0) 99 { 100 printf("ret=%d ",ret); 101 perror("write"); 102 } 103 } 104 105 END: 106 close(fd); 107 return 0; 108 }
以上是关于网络编程2.0的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段14——Vue的axios网络请求封装
VSCode自定义代码片段14——Vue的axios网络请求封装