首页 > 代码库 > Linux_C socket server.c clinet.c功能分开写
Linux_C socket server.c clinet.c功能分开写
socklib.h
1 int make_server_socket(int );2 int connect_to_server(char* , int );3 int process_request(int );4 int talk_with_server(int );
socklib.c
1 /* socklib.c 2 * This file contains functions used lots when writing internet 3 * client/ server programs. The two main functions here are: 4 * 5 * int make_server_socket(portnum) returns a server socket 6 * or -1 if error 7 * int make_server_socket_q(portnum, backlog) 8 * 9 * int connect_to_server(char* hostname, int portnum) return a connected socket 10 * or -1 if error 11 */ 12 #include <stdio.h> 13 #include <unistd.h> 14 #include <sys/socket.h> 15 #include <sys/types.h> 16 #include <netinet/in.h> 17 #include <netdb.h> 18 #include <time.h> 19 #include <strings.h> 20 21 #define HOSTLEN 256 22 #define BACKLOG 1 23 #define oops(msg) {perror(msg); exit(1);} 24 25 int make_server_socket_q(int , int); 26 27 int make_server_socket(int portnum) { 28 return make_server_socket_q(portnum, BACKLOG); 29 } 30 31 int make_server_socket_q(int portnum, int backlog) { 32 struct sockaddr_in saddr; 33 struct hostent *hp; 34 char hostname[HOSTLEN]; 35 int sock_id; 36 sock_id=socket(PF_INET, SOCK_STREAM, 0); 37 if(sock_id == -1) 38 return -1; 39 /*bulid socket bind*/ 40 bzero((void*)&saddr, sizeof(saddr)); 41 gethostname(hostname, HOSTLEN); 42 hp=gethostbyname(hostname); 43 44 bcopy((void*)hp->h_addr, (void*)&saddr.sin_addr, hp->h_length); 45 saddr.sin_port=htons(portnum); 46 saddr.sin_family=AF_INET; 47 if(bind(sock_id, (struct sockaddr*)&saddr, sizeof(saddr))!=0) 48 return -1; 49 50 /** arrange for incoming calls **/ 51 if(listen(sock_id, backlog)!=0) 52 return -1; 53 return sock_id; 54 } 55 56 int connect_to_server(char *host, int portnum) { 57 int sock; 58 struct sockaddr_in servadd; 59 struct hostent *hp; 60 /** Step1: get a socket**/ 61 sock=socket(AF_INET, SOCK_STREAM, 0); 62 if(sock==-1) 63 return -1; 64 /**Step2: connect to server**/ 65 bzero((void*)&servadd, sizeof(servadd)); 66 hp=gethostbyname(host); 67 if(hp==NULL) 68 return -1; 69 bcopy(hp->h_addr, (struct sockaddr*)&servadd.sin_addr, hp->h_length); 70 servadd.sin_port=htons(portnum); 71 servadd.sin_family=AF_INET; 72 if(connect(sock, (struct sockaddr* )&servadd, sizeof(servadd))!=0) 73 return -1; 74 return sock; 75 } 76 77 int talk_with_server(int fd) { 78 char buf[BUFSIZ]; 79 int len; 80 len = read(fd, buf, BUFSIZ); 81 if(len==-1) 82 return -1; 83 if(write(1, buf, len)!=len) 84 return -1; 85 return 0; 86 } 87 /* 88 int process_request(int fd) { 89 time_t thetime; 90 char *cp; 91 time(&thetime); 92 cp=ctime(&thetime); 93 if(write(fd, cp, strlen(cp)) != strlen(cp)) 94 return -1; 95 return 0; 96 } 97 */ 98 int process_request(int fd) { 99 int pid = fork();100 switch(pid) {101 case -1: return -1;102 case 0: dup2(fd, 1);103 close(fd);104 execl("/bin/date", "date", NULL);105 oops("execl");106 default:wait(NULL);107 }108 }
/* timeclnt_new.c - a new client for use the socklib.c */#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#include <time.h>#include <strings.h>#include "socklib.h"#define oops(msg) {perror(msg); exit(1);}int main(int argc, char* argv[]){ int sock_id; sock_id=connect_to_server(argv[1],atoi(argv[2])); if(sock_id==-1) oops("connect_to_server"); if(talk_with_server(sock_id) == -1) oops("talk_to_server"); close(sock_id); return 0;}
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <sys/types.h> 4 #include <sys/socket.h> 5 #include <netinet/in.h> 6 #include <netdb.h> 7 #include <time.h> 8 #include <strings.h> 9 #include "socklib.h"10 11 #define oops(msg){ perror(msg); exit(1);}12 #define PORTNUM 1300013 int main(void ) {14 int sockid, fd;15 sockid=make_server_socket(PORTNUM);16 if(sockid==-1)17 oops("make_server_socket");18 while(1){19 fd=accept(sockid, NULL, NULL);20 if(fd==-1)21 break;22 process_request(fd);23 close(fd);24 }25 return 0;26 }
Linux_C socket server.c clinet.c功能分开写
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。