标签:\n link ipc 日志 get 参数类型 inf 存在 ons
socket:
};
inet_pton是一个IP地址转换函数,可以在将IP地址在“点分十进制”和“二进制整数”之间转换而且,inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6。
inet_pton函数成功的话返回1,参数无效返回0,错误返回-1;
1 #include"common.h" 2 3 typedef struct stu 4 { 5 int id; 6 char name[20]; 7 struct stu *next; 8 }Stu,*PStu; 9 10 void create_list(PStu *phead) //创建链表函数 11 { 12 *phead=NULL; 13 PStu ptr,r; 14 int id; 15 char name[20]; 16 printf("当id为0时结束添加\n"); 17 printf("id="); 18 scanf("%d",&id);getchar(); 19 while(id>0) 20 { 21 printf("name="); 22 scanf("%s",name);getchar(); 23 ptr=malloc(sizeof(Stu)); 24 ptr->id=id; 25 strcpy(ptr->name,name); 26 ptr->next=NULL; 27 if(*phead==NULL) 28 { 29 *phead=ptr; 30 } 31 else 32 { 33 r->next=ptr; 34 } 35 r=ptr; 36 37 printf("当id为0时结束添加\n"); 38 printf("id="); 39 scanf("%d",&id);getchar(); 40 } 41 return ; 42 } 43 44 void fun() 45 { 46 printf("链接中断\n"); 47 return; 48 } 49 50 int main() 51 { 52 int fd; 53 int ret; 54 struct sockaddr_in saddr; 55 signal(SIGPIPE,fun);//捕捉信号 56 fd=socket(AF_INET,SOCK_STREAM,0); 57 if(fd<0) 58 { 59 perror("socket"); 60 return -1; 61 } 62 saddr.sin_family=AF_INET; 63 saddr.sin_port=htons(9000); 64 inet_pton(AF_INET,"192.168.6.128",&saddr.sin_addr.s_addr);//本机IP 65 ret = connect(fd,(struct sockaddr*)&saddr,sizeof(saddr)); 66 if(ret<0) 67 { 68 perror("connect"); 69 goto END; 70 } 71 72 PStu head=NULL;//发送链表 73 create_list(&head); 74 PStu p=head; 75 for(;p!=NULL;p=p->next) 76 { 77 ret = write(fd,p,sizeof(Stu)); 78 if(ret<0) 79 { 80 perror("write"); 81 } 82 } 83 END: 84 close(fd); 85 return 0; 86 }
bind:
将一本地地址与一套接口捆绑。本函数适用于未连接的数据报或流类套接口,在connect()或listen()调用前使用。当用socket()创建套接口后,它便存在于一个名字空间(地址族)中,但并未赋名。bind()函数通过给一个未命名套接口分配一个本地名字来为套接口建立本地捆绑(主机地址/端口号)。
1 #include "common.h" 2 typedef struct stu 3 { 4 int id; 5 char name[20]; 6 struct stu *next; 7 }Stu,*PStu; 8 9 void fun(int sig) 10 { 11 printf("recv pip:%d\n",sig); 12 return; 13 } 14 15 void show(PStu head) 16 { 17 printf("学号\t姓名\n"); 18 while(head!=NULL) 19 { 20 printf("%d\t%s\n",head->id,head->name); 21 head=head->next; 22 } 23 return ; 24 } 25 26 int main() 27 { 28 PStu head=NULL; 29 Stu *ptr; 30 PStu r; 31 int fd,nfd; 32 int ret; 33 struct sockaddr_in saddr,caddr; 34 int addr_len; 35 signal(SIGPIPE,fun); 36 37 fd = socket(AF_INET,SOCK_STREAM,0); 38 if(fd<0) 39 { 40 perror("socket"); 41 return -1; 42 } 43 44 saddr.sin_family = AF_INET; 45 saddr.sin_port = htons(9000); 46 inet_pton(AF_INET,"192.168.6.128",&saddr.sin_addr.s_addr);//本机IP 47 48 ret = bind(fd,(struct sockaddr*)&saddr,sizeof(saddr)); 49 if(ret<0) 50 { 51 perror("bind"); 52 goto END; 53 } 54 55 ret = listen(fd,20); 56 if(ret<0) 57 { 58 perror("listen"); 59 goto END; 60 } 61 62 addr_len = sizeof(caddr); 63 printf("accept..\n"); 64 nfd = accept(fd,(struct sockaddr*)&caddr,&addr_len); 65 printf("accept over..\n"); 66 if(nfd<0) 67 { 68 perror("accept"); 69 } 70 printf("read...\n"); 71 while(1) 72 { 73 ptr=malloc(sizeof(Stu)); 74 ret=read(nfd,ptr,sizeof(Stu)); 75 if(ret<0) 76 { 77 perror("read");break; 78 } 79 if(ret==0) 80 { 81 82 printf("read over\n"); 83 show(head); 84 break; 85 } 86 if(ret>0); 87 { 88 ptr->next=NULL; 89 if(head==NULL) 90 { 91 head=ptr; 92 } 93 else 94 { 95 r->next=ptr; 96 } 97 r=ptr; 98 } 99 } 100 101 102 103 close(nfd); 104 105 END: 106 close(fd); 107 return 0; 108 }
运行结果试行:
标签:\n link ipc 日志 get 参数类型 inf 存在 ons
原文地址:https://www.cnblogs.com/it8343/p/9261217.html