LINUX.ORG.RU

История изменений

Исправление cvs-255, (текущая версия) :

Ты спрашивал где в TCP двусторонняя связь? Я тебе привел

Либо же чуть модифицированный вариант:

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

int main()
{
    int err=-1;
    int server_sockfd, client_sockfd;
    int server_len, client_len;
    struct sockaddr_in server_address;
    struct sockaddr_in client_address;

    server_sockfd = socket(AF_INET, SOCK_STREAM, 0);

    server_address.sin_family = AF_INET;
    server_address.sin_addr.s_addr = htonl(INADDR_ANY);
    server_address.sin_port = htons(9734);
    server_len = sizeof(server_address);
    err=(bind(server_sockfd, (struct sockaddr *) &server_address, server_len));

    if(err!=0)
        printf("bind error!\n");
    else
        printf("bind is ok\n");
    err=-1;

    err=(listen(server_sockfd, 5));
    if(err!=0)
        printf("listen error!\n");
    else
        printf("listen is ok\n");
    printf("server waiting\n");

    client_len = sizeof(client_address);
    client_sockfd = accept(server_sockfd, (struct sockaddr *) &client_address, &client_len);

    while(1)
    {
        char ch;
        if (read(client_sockfd, &ch, 1) != 0)
        {
                ch++;
                write(client_sockfd, &ch, 1);
        }
        else
                break;
    }
    close(client_sockfd);
    printf("exiting\n");
}

В этом случае вообще соединение только 1 раз создается, а потом в него пишется и читается много-много раз

Исходная версия cvs-255, :

Ты спрашивал где в TCP двусторонняя связь? Я тебе привел

Либо же чуть модифицированный вариант:

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

int main()
{
    int err=-1;
    int server_sockfd, client_sockfd;
    int server_len, client_len;
    struct sockaddr_in server_address;
    struct sockaddr_in client_address;

    server_sockfd = socket(AF_INET, SOCK_STREAM, 0);

    server_address.sin_family = AF_INET;
    server_address.sin_addr.s_addr = htonl(INADDR_ANY);
    server_address.sin_port = htons(9734);
    server_len = sizeof(server_address);
    err=(bind(server_sockfd, (struct sockaddr *) &server_address, server_len));

    if(err!=0)
        printf("bind error!\n");
    else
        printf("bind is ok\n");
    err=-1;

    err=(listen(server_sockfd, 5));
    if(err!=0)
        printf("listen error!\n");
    else
        printf("listen is ok\n");
    printf("server waiting\n");

    client_len = sizeof(client_address);
    client_sockfd = accept(server_sockfd, (struct sockaddr *) &client_address, &client_len);

    while(1)
    {
        char ch;
        if (read(client_sockfd, &ch, 1) != 0)
        {
                ch++;
                write(client_sockfd, &ch, 1);
        }
        else
                break;
    }
    close(client_sockfd);
    printf("exiting\n");
}

В этом случае вообще соединение только 1 раз создается, а потом в него пишется и читается