TCP 프로 토 콜 기반 프로 세 스 간 통신

5779 단어 네트워크
TCP 프로 토 콜 은 전송 계층 에 적용 되 는 프로 토 콜 입 니 다.연결 을 위 한 신뢰 할 수 있 는 프로 토 콜 입 니 다.
TCP 프로 토 콜 의 특징:
1) 바이트 로 흐른다.
2) TCP 는 연결 을 위 한 운송 층 프로 토 콜
3) TCP 링크 마다 두 개의 점 만 있 을 수 있다.
4) TCP 는 신뢰성 있 는 서 비 스 를 제공한다.
5) TCP 는 듀 플 렉 스 통신 제공
TCP 프로 토 콜 에 따라 세 번 악 수 를 하면 server 는 감청 상태 에 있 고 client 의 요청 연결 (connect) 신 호 를 받 으 면 accept 이 연결 을 받 습 니 다.
  server:
   1 #include
  2 #include
  3 #include
  4 #include
  5 #include
  6 #include
  7 #include
  8 #include
  9 #define _BACKLOG 5
 10 void usage(char *_proc)
 11 {
 12     printf("usage: %s,[ip],[proc]",_proc);
 13 }
 14 int startup(const char *ip,const int port)
 15 {
 16     int sock = socket(AF_INET,SOCK_STREAM,0); //     
 17     if(sock 0)
 46         {
 47             buf[size] = '\0';
 48         }
 49         else if(size==0)
 50         {
 51             printf("client close...
");  52             break;  53         }  54         else  55         {  56             perror("read");  57             exit(3);  58         }  59         printf("client say: %s
",buf);  60     }  61     close(sock);  62     return NULL;  63 }  64   65 int main(int argc,char *argv[])  66 {  67     if(argc != 3)  68     {   69         usage(argv[0]);  70         exit(1);  71     }  72     char *ip = argv[1];  73     int port = atoi(argv[2]);  74     int listen_sock = startup(ip,port);  75     struct sockaddr_in client;  76     socklen_t len = sizeof(client);  77     while(1)  78     {  79         int new_sock = accept(listen_sock,(struct sockaddr*)&client,&len);  80         if(new_sock<0)  81         {  82             perror("accept");  83             continue;  84         }  85         printf("get a client... sock %d,ip: %s,port: %d
",new_sock,inet_nto    a(client.sin_addr),ntohs(client.sin_port));  86 #ifdef _V1_ //  87         char buf[1024];  88         while(1)  89         {  90             ssize_t size = read(new_sock,buf,sizeof(buf)-1);  91             if(size>0)  92             {  93                 buf[size] = '\0';  94             }  95             else if(size==0)  96             {  97                 printf("client close...
");  98                 break;  99             } 100             else 101             { 102                 perror("read"); 103                 exit(3); 104             } 105             printf("client say :%s
",buf); 106         } 107 #elif _V2_ // 108         pid_t pid = fork(); 109         if(pid<0) 110         {                               111             perror("fork"); 112             exit(4); 113         } 114         else if(pid == 0) 115         {//child 116             close(listen_sock); 117             char *_client = inet_ntoa(client.sin_addr); 118             char buf[1024]; 119             while(1) 120             { 121                 memset(buf,'\0',sizeof(buf)); 122                 ssize_t size = read(new_sock,buf,sizeof(buf)-1); 123                 if(size>0) 124                 { 125                     buf[size] = '\0'; 126                 } 127                 else if(size==0) 128                 { 129                     printf("[ip]:%s close...
",_client); 130                     break; 131                 } 132                 else 133                 { 134                     perror("read"); 135                     exit(3); 136                 } 137                 printf("[ip]:%s say :%s
",_client,buf); 138             } 139             close(new_sock); 140             exit(0); 141         } 142         else 143         {//father 144             close(new_sock); 145         } 146 #elif _V3_ // 147         pthread_t pid; 148         pthread_create(&pid,NULL,pthread,(void*)new_sock); 149         pthread_detach(pid); 150 #else 151         printf("default"); 152 #endif 153     } 154     return 0; 155 } client:    1 #include   2 #include   3 #include   4 #include   5 #include   6 #include   7 #include   8    9 void usage(char *proc)  10 {  11     printf("usage:%s,[remote ip],[remote proc]",proc);  12 }  13 int main(int argc,char *argv[])  14 {  15     if(argc != 3)  16     {  17         usage(argv[0]);  18         exit(1);  19     }  20     int sock = socket(AF_INET,SOCK_STREAM,0);  21     if(sock<0)  22     {  23         perror("sock");  24         exit(1);  25     }  26     int port = atoi(argv[2]);  27     char *ip = argv[1];  28     struct sockaddr_in remote;  29     remote.sin_family = AF_INET;  30     remote.sin_port = htons(port);  31     remote.sin_addr.s_addr = inet_addr(ip);  32   33     int ret = connect(sock,(struct sockaddr*)&remote,sizeof(remote));  34     if(ret<0)  35     {  36         perror("connect");  37         exit(2);  38     }  39     char buf[1024];  40     while(1)  41     {  42         printf("please say: ");  43         scanf("%s",buf);  44         ssize_t size = write(sock,buf,sizeof(buf)-1);  45   46     }  47     return 0;  48 }     : [fbl@localhost tcp]$ ./tcp_server 192.168.1.106 8080 get a client... sock 4,ip: 192.168.1.106,port: 51708 client say: hello client say: hi client say: nihao client close... ^C [fbl@localhost tcp]$  [fbl@localhost tcp]$ ./tcp_client 192.168.1.106 8080 please say: hello please say: hi please say: nihao  please say: ^C [fbl@localhost tcp]$

다음으로 전송:https://blog.51cto.com/fengbaoli/1782252

좋은 웹페이지 즐겨찾기