• linux c socket server client 实例


    client.c

    #include <stdio.h>
    #include
    <sys/socket.h>
    #include
    <arpa/inet.h>
    #include
    <stdlib.h>
    #include
    <string.h>
    #include
    <unistd.h>
    #include
    <netinet/in.h>

    #define BUFFSIZE 32
    void Die(char *mess) { perror(mess); exit(1); }
    int main(int argc, char *argv[]) {
    int sock;
    struct sockaddr_in echoserver;
    char buffer[BUFFSIZE];
    unsigned
    int echolen;
    int received = 0;

    if (argc != 4) {
    fprintf(stderr,
    "USAGE: TCPecho <server_ip> <word> <port>\n");
    exit(
    1);
    }
    /* Create the TCP socket */
    if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
    Die(
    "Failed to create socket");
    }


    /* Construct the server sockaddr_in structure */
    memset(
    &echoserver, 0, sizeof(echoserver)); /* Clear struct */
    echoserver.sin_family
    = AF_INET; /* Internet/IP */
    echoserver.sin_addr.s_addr
    = inet_addr(argv[1]); /* IP address */
    echoserver.sin_port
    = htons(atoi(argv[3])); /* server port */
    /* Establish connection */
    if (connect(sock,
    (
    struct sockaddr *) &echoserver,
    sizeof(echoserver)) < 0) {
    Die(
    "Failed to connect with server");
    }


    /* Send the word to the server */
    echolen
    = strlen(argv[2]);
    if (send(sock, argv[2], echolen, 0) != echolen) {
    Die(
    "Mismatch in number of sent bytes");
    }
    /* Receive the word back from the server */
    fprintf(stdout,
    "Received: ");
    while (received < echolen) {
    int bytes = 0;
    if ((bytes = recv(sock, buffer, BUFFSIZE-1, 0)) < 1) {
    Die(
    "Failed to receive bytes from server");
    }
    received
    += bytes;
    buffer[bytes]
    = '\0'; /* Assure null terminated string */
    fprintf(stdout, buffer);
    }


    fprintf(stdout,
    "\n");
    close(sock);
    exit(
    0);
    }

      

    server.c

    #include <stdio.h>
    #include
    <sys/socket.h>
    #include
    <arpa/inet.h>
    #include
    <stdlib.h>
    #include
    <string.h>
    #include
    <unistd.h>
    #include
    <netinet/in.h>

    #define MAXPENDING 5 /* Max connection requests */
    #define BUFFSIZE 32
    void Die(char *mess) { perror(mess); exit(1); }
    void HandleClient(int sock) {
    char buffer[BUFFSIZE];
    int received = -1;
    /* Receive message */
    if ((received = recv(sock, buffer, BUFFSIZE, 0)) < 0) {
    Die(
    "Failed to receive initial bytes from client");
    }
    /* Send bytes and check for more incoming data in loop */
    while (received > 0) {
    /* Send back received data */
    if (send(sock, buffer, received, 0) != received) {
    Die(
    "Failed to send bytes to client");
    }
    /* Check for more data */
    if ((received = recv(sock, buffer, BUFFSIZE, 0)) < 0) {
    Die(
    "Failed to receive additional bytes from client");
    }
    }
    close(sock);
    }

    int main(int argc, char *argv[]) {
    int serversock, clientsock;
    struct sockaddr_in echoserver, echoclient;

    if (argc != 2) {
    fprintf(stderr,
    "USAGE: echoserver <port>\n");
    exit(
    1);
    }
    /* Create the TCP socket */
    if ((serversock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
    Die(
    "Failed to create socket");
    }
    /* Construct the server sockaddr_in structure */
    memset(
    &echoserver, 0, sizeof(echoserver)); /* Clear struct */
    echoserver.sin_family
    = AF_INET; /* Internet/IP */
    echoserver.sin_addr.s_addr
    = htonl(INADDR_ANY); /* Incoming addr */
    echoserver.sin_port
    = htons(atoi(argv[1])); /* server port */

    /* Bind the server socket */
    if (bind(serversock, (struct sockaddr *) &echoserver,
    sizeof(echoserver)) < 0) {
    Die(
    "Failed to bind the server socket");
    }
    /* Listen on the server socket */
    if (listen(serversock, MAXPENDING) < 0) {
    Die(
    "Failed to listen on server socket");
    }
    /* Run until cancelled */
    while (1) {
    unsigned
    int clientlen = sizeof(echoclient);
    /* Wait for client connection */
    if ((clientsock =
    accept(serversock, (
    struct sockaddr *) &echoclient,
    &clientlen)) < 0) {
    Die(
    "Failed to accept client connection");
    }
    fprintf(stdout,
    "Client connected: %s\n",
    inet_ntoa(echoclient.sin_addr));
    HandleClient(clientsock);
    }
    }

      

    使用:

    ./server 8080
    .
    /client 127.0.0.1 "nihao" 8080


    server:
    *******output*********
    Client connected:
    127.0.0.1


    client:
    *******output***********
    Received: nihao

     

    参考资料:http://www.ibm.com/developerworks/cn/education/linux/l-sock/section2.html

  • 相关阅读:
    VOJ 1049送给圣诞夜的礼物——矩阵快速幂模板
    梅森旋转算法
    C语言实验二——位运算
    C语言实验1—— C中的指针和结构体
    Leonardo的笔记本LA 3641——置换的乘法
    ngnix
    centos Linux 常用命令汇总
    vimrc 避免中文乱码配置
    PHP
    批量修改文件权限 和所有者 chown nobody:nobody * -R chmod 775 * -R
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/2114579.html
Copyright © 2020-2023  润新知