Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ под Linux

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.77
qtheya
0 / 0 / 0
Регистрация: 29.01.2010
Сообщений: 6
#1

клиент-сервер (сокеты) - C++ Linux

29.01.2010, 23:18. Просмотров 4892. Ответов 1
Метки нет (Все метки)

сервер
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <sys/types.h>  
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h>  
#include <string.h>     
#include <stdio.h>      
#include <errno.h>      
#include <unistd.h>     
#include <stdlib.h>     
 
void Func();
 
int main();
{
    int sockfd, newsockfd; 
    int clilen; 
    int n; 
    char line[1000]; 
    struct sockaddr_in servaddr, cliaddr; 
    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        perror(NULL);
        exit(1);
    }
    
    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(51000);
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    
    if(bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)
    {
        perror(NULL);
        close(sockfd);
        exit(1);
    }
   
    if(listen(sockfd, 5) < 0)
    {
        perror(NULL);
        close(sockfd);
        exit(1);
    }
    
    while(1)
    {
        
        clilen = sizeof(cliaddr);
        
        unsigned char netchar;
        int = 0;
               if((newsockfd = accept(sockfd, (struct sockaddr *) &cliaddr, &clilen)) < 0)
        {
            perror(NULL);
            close(sockfd);
            exit(1);
        }
       
        while((n = read(newsockfd, &netchar, 1)) > 0)
        {
            if(netchar)
            {
                line[i++] = netchar;    
                continue;
            }
            line[i] = 0;
            
            printf("sread: %s", line);
            
            if(!strncmp(line, "exit", 4))
            {
                close(newsockfd);
                break;
            }
            
            if(!strncmp(line, "hello", 5))
            {
                //Func();
                strcpy(line, "Hello world\n");
                //gets(line, 1000, stdout);
            }
            
            
            if((n = write(newsockfd, line, strlen(line)+1)) < 0)
            {
                perror(NULL);
                close(sockfd);
                close(newsockfd);
                exit(1);
            }
            i=0;    
        }
    
    if(n < 0)
        {
            perror(NULL);
            close(sockfd);
            close(newsockfd);
            exit(1);
        }
        
        close(newsockfd);
    }
}
 
 
void Func()
{
    printf("Hello world!\n");
}
клиент
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <sys/types.h>  
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h>  
#include <string.h>     
#include <stdio.h>      
#include <errno.h>      
#include <unistd.h>     
#include <stdlib.h>     
    
void main(int argc, int argv)
{
    int sockfd; 
    int n; 
    int i; 
    char sendline[1000],recvline[1000]; 
    struct sockaddr_in servaddr; 
    struct hostent *host; 
    
    if(argc != 2)
    {
        printf("Usage: a.out <IP address>\n");
        exit(1);
    }
    if((host = gethostbyname(argv[1])) == NULL)
    {
        printf("nslookup failed on '%s'\n", argv[1]);
        exit(1);
    }
    else
    {
        printf("Connect to... %s\n", argv[1]);
    }
    
    bzero(sendline,1000);
    bzero(recvline,1000);
    
    if((sockfd = socket(PF_INET, SOCK_STREAM, 0)) < 0)
    {
        perror(NULL); 
        exit(1);
    }
   
    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(51000);
    //servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    if(inet_aton(argv[1], &servaddr.sin_addr) == 0)
    {
        printf("Invalid IP address\n");
        close(sockfd);
        exit(1);
    }
   
    if(connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)
    {
        printf("Connect is fail\n");
        perror(NULL);
        close(sockfd);
        exit(1);
    }
    else
    {
    
    printf("Connect is done!\n");
    }
    
    //for(i=0; i<3; i++)
    
    
    for(;;)
    {
        printf("Enter=> ");
        fflush(stdin);
        fgets(sendline, 1000, stdin);
        if( (n = write(sockfd, sendline, strlen(sendline)+1)) < 0)
        {
            perror("Can\'t write\n");
            close(sockfd);
            exit(1);
        }
        if ( (n = read(sockfd,recvline, 999)) < 0)
        {
            perror("Can\'t read\n");
            close(sockfd);
            exit(1);
        }
        if (n == 0)
        {
            break;
        }
        
        printf("%s", recvline);
    }
    
    close(sockfd);
}
У меня в понидельник защита курсака помогите исправить ошибки - молю! Не судите строго за failы, я только учусь. Зарание благодарю.

Добавлено через 31 минуту
тему можна закрыть, я уже разобрался.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2010, 23:18
Я подобрал для вас темы с готовыми решениями и ответами на вопрос клиент-сервер (сокеты) (C++ Linux):

Сокеты. Как правильно написать сервер? - C++ Linux
Поясните, плиз, как правильно написать сервер для работы с несколькими клиентами через сокеты (с++, линукс) ?

клиент-сервер - C++ Linux
Помогите написать несложный NNTP клиент-сервер с использованием стратегии fork() на C++. Буду очень признателен... Пока есть только скелет...

клиент/сервер - C++ Linux
День добрый. У меня на микроконтроллере есть файл(сервер), для соединения клиента к серверу я постоянно запускаю вручную этот сервер,...

Программа клиент-сервер - C++ Linux
Доброго времени суток!Я делаю программу клиент-сервер на C под линуксом(Debian).У меня такой вопрос:мне нужно передовать команды от клиента...

клиент-браузер, сервер-программа - C++ Linux
как можно принять на сервере написанным на С++ под linux данные отправленные от браузера через протокол webSocket?

Чат клиент-сервер на сокетах - C++ Linux
и все таки появилась еще одна проблема раньше все сообщения от клиентов просто оставались на сервере теперь я хотел бы чтобы сервер...

1
Glebsan
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 4
07.02.2010, 15:18 #2
Если можно, что была за ошибка?)
И как называется тема курсовой?))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2010, 15:18
Привет! Вот еще темы с ответами:

Клиент-сервер.. IP-адрес подключившегося - C++ Linux
Взял за основу такой сервер (эхо): #include &lt;sys/types.h&gt; #include &lt;sys/socket.h&gt; #include &lt;sys/time.h&gt; #include &lt;netinet/in.h&gt; ...

Клиент Сервер -передача видео и строк - C++ Linux
Есть задача, незнаю как ее лучше реализовать. Задача: Сервер принимает команды ввиде строки от клиента , передает видео через opencv...

Простой клиент-сервер на сообщениях (ошибка в подключении библиотеки) - C++ Linux
Здравствуйте. Сразу скажу, что писать что-то и т.д не прошу! Просто помогите понять в чем ошибка. Переписал книжный пример...

Подружим STD::Thread (потоки) и сервер-клиент (tcp-server) - C++ Linux
Господа, пишу сервер, который принимает от клиентов сообщения и отправляет их назад (и если клиентов несколько, то все клиенты видят все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru