zoukankan      html  css  js  c++  java
  • linux_c_tcp_example

    server

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 #include <unistd.h>
     5 #include <arpa/inet.h>
     6 #include <sys/socket.h>
     7 
     8 
     9 #define BUF_SIZE 1024
    10 
    11 void err_handler(char *msg);
    12 
    13 int main(int argc, char **argv) {
    14     int srv_sock, cli_sock;
    15     char msg[BUF_SIZE];
    16     int str_len;
    17 
    18     struct sockaddr_in srv_addr, cli_addr;
    19     socklen_t cli_adr_sz;
    20 
    21     if (argc != 2) {
    22         printf("Usage : %s <port>", argv[0]);
    23         exit(1);
    24     }
    25 
    26     srv_sock = socket(PF_INET, SOCK_STREAM, 0);
    27     if (srv_sock == -1) {
    28         err_handler("socket() error");
    29     }
    30 
    31     memset(&srv_addr, 0, sizeof(srv_addr));
    32     srv_addr.sin_family = AF_INET;
    33     srv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    34     srv_addr.sin_port = htons(atoi(argv[1]));
    35 
    36     if (bind(srv_sock, (struct sockaddr *) &srv_addr, sizeof(srv_addr)) == -1) {
    37         err_handler("bind() error");
    38     }
    39 
    40     if (listen(srv_sock, 5) == -1) {
    41         err_handler("listen() error");
    42     }
    43 
    44     cli_adr_sz = sizeof(cli_addr);
    45 
    46     for (int i = 0; i < 5; ++i) {
    47         cli_sock = accept(srv_sock, (struct sockaddr *) &cli_addr, &cli_adr_sz);
    48         if (cli_sock == -1) {
    49             err_handler("accept() error");
    50         } else {
    51             printf("connected client %d
    ", i + i);
    52         }
    53 
    54         while ((str_len = read(cli_sock, msg, BUF_SIZE)) != 0) {
    55             write(cli_sock, msg, str_len);
    56         }
    57         close(cli_sock);
    58     }
    59 
    60     close(srv_sock);
    61     return 0;
    62 }
    63 
    64 void err_handler(char *msg) {
    65     fputs(msg, stderr);
    66     fputc('
    ', stderr);
    67     exit(1);
    68 }
    View Code

    client

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 #include <unistd.h>
     5 #include <arpa/inet.h>
     6 #include <sys/socket.h>
     7 
     8 
     9 #define BUF_SIZE 1024
    10 
    11 void err_handler(char *msg);
    12 
    13 int main(int argc, char **argv) {
    14     int sock;
    15     char msg[BUF_SIZE];
    16     int str_len;
    17     struct sockaddr_in srv_addr;
    18 
    19     if (argc != 3) {
    20         printf("Usage : %s <port>", argv[0]);
    21         exit(1);
    22     }
    23 
    24     sock = socket(PF_INET, SOCK_STREAM, 0);
    25     if (sock == -1) {
    26         err_handler("socket() error");
    27     }
    28 
    29     memset(&srv_addr, 0, sizeof(srv_addr));
    30     srv_addr.sin_family = AF_INET;
    31     srv_addr.sin_addr.s_addr = inet_addr(argv[1]);
    32     srv_addr.sin_port = htons(atoi(argv[2]));
    33 
    34     if (connect(sock, (struct sockaddr *) &srv_addr, sizeof(srv_addr)) == -1) {
    35         err_handler("connect() error");
    36     } else {
    37         printf("connected .........");
    38     }
    39 
    40     while (1) {
    41         fputs("Input msg(Q to quit):", stdout);
    42         fgets(msg, BUF_SIZE, stdin);
    43         if (!strcmp(msg, "q
    ") || !strcmp(msg, "Q
    ")) {
    44             break;
    45         }
    46         write(sock, msg, strlen(msg));
    47         str_len = read(sock, msg, BUF_SIZE - 1);
    48         msg[str_len] = 0;
    49         printf("Msg form srv : %s", msg);
    50     }
    51 
    52     close(sock);
    53     return 0;
    54 }
    55 
    56 void err_handler(char *msg) {
    57     fputs(msg, stderr);
    58     fputc('
    ', stderr);
    59     exit(1);
    60 }
    View Code

    Makefile

    all a_b:
        gcc -o srv main.c -g -Wall
        gcc -o cli client.c -g -Wall
  • 相关阅读:
    Oracle重建表索引及手工收集统计信息
    VirtualBox虚拟机安装MSDOS和MINIX2.0.0双系统
    odp.net以及oracle oledb安装
    Oralce常用维护命令
    Sales_item
    IBM MQ Reason 2538(MQRC_HOST_NOT_AVAILABLE) 错误原因一例
    Unable to create the store directory. (Exception from HRESULT: 0x80131468)
    WMS函数组:13.WMS入库BAPI
    WMS函数组:12.批量入库物料移动凭证
    WMS函数组:11.交货单取金额
  • 原文地址:https://www.cnblogs.com/--just-lbk/p/11713827.html
Copyright © 2011-2022 走看看