Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 08.10.2010
Сообщений: 28

Сервер и 2 клиента

06.05.2012, 18:01. Показов 1121. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста с программами. Есть 2 клиента и 1 сервер. Клиенты отсылают по 1 слову серверу, а сервер возвращает каждому клиенту слое слово. В принципе он работает, но не правельно. Если отсылать серверу Mother и Brother, то он вернет обоим father. Если 1Mother и 1Brother то вернет sister. Если 1Mother и 2Brother. То 1-ому sister, а 2-ому father. В общем зависит от 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
#include "stdafx.h"
#include <sys/types.h>
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#include <iostream>
 
using namespace std;
 
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"netapi32.lib")
 
DWORD WINAPI ThreadFunc(LPVOID s1)
{
   SOCKET s2 = ((SOCKET *) s1)[0];
    const int ar = 10;
    char FromClientToServer[ar];
    const int arr = 12;
    char FromServerToClient[ar]= "Sister";
    char FromServerToClient2[ar]= "Father";
//  memset(buf, 0, sizeof(buf));
    int rc;
    while(rc = recv(s2, FromClientToServer, sizeof(FromClientToServer),0))
    {   
    if(rc <= 0){perror("Ошибка приема сообщения");  return 1; } 
    else cout << "Приняли от клиента " <<  FromClientToServer << endl;
 
    if (FromClientToServer[0] == '1')
    rc = send(s2, FromServerToClient, sizeof(FromServerToClient),0);
    else rc = send(s2, FromServerToClient2, sizeof(FromServerToClient2),0);
    if(rc <= 0) {perror("Ошибка посылки сообщения");  return 1; }
    else if (FromClientToServer[0] == '1')
        cout << "Послали клиенту " << FromServerToClient << endl; 
        else cout << "Послали клиенту " << FromServerToClient2 << endl; // if (FromClientToServer[0] == 2)
        
    }
    cout << "Сокет закрыли" << endl;
    closesocket(s2); // закрыли сокет
    return 0;
} 
 
int main(){ 
 
    setlocale (LC_ALL,"Rus");
    
        struct sockaddr_in local;
        SOCKET s, s1;
        int rc;
        //const int ar = 10;
        //  char buf[arr];
        
    WSADATA WsaData;
    int err = WSAStartup (0x0101, &WsaData);
      if (err == SOCKET_ERROR)
      {printf ("WSAStartup() failed: %ld\n", GetLastError ()); return 1;} 
 
        local.sin_family = AF_INET;
        local.sin_port = htons(7500);
        local.sin_addr.s_addr = htonl(INADDR_ANY);
       
        s = socket(AF_INET,SOCK_STREAM,0);
         if (s < 0){perror("Сокет не создан"); exit(1);}
         else cout<<"Сокет создан\n" << endl;
 
        rc = bind(s,(struct sockaddr*)&local, sizeof(local));
        if (rc < 0){perror("Соединение не проходит !"); exit(1);}
        else    cout<<"Соединение произошло\n" << endl; 
 
           rc = listen(s,5);
           if(rc){perror("Прослушка не идет");  exit(1); }
        else cout<<"Слушаем \n" << endl;
 
        int local2 = sizeof(local);
        while(s1 = accept(s,0,0))
        {
        DWORD thID; 
          CreateThread(NULL, NULL, ThreadFunc, &s1, NULL, &thID);
}
int a; cin >> a;
return 0;
}
Клиент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
#include "stdafx.h" 
#include <sys/types.h>
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#include <iostream>
 
# pragma comment (lib, "ws2_32.lib")
# pragma comment (lib, "netapi32.lib")
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    
    setlocale (LC_ALL,"Rus");
 
     struct sockaddr_in peer;
     SOCKET s;
     int rc;
     char buf [10] = "mother";
 
     WSADATA wsaData;
     int wsaret = WSAStartup (0x101, &wsaData);
     if (wsaret!=0) { return 0; }
 
     peer.sin_family = AF_INET;
     peer.sin_port = htons (7500);
     peer.sin_addr.s_addr = inet_addr ("127.0.0.1");
 
     s = socket (AF_INET, SOCK_STREAM, 0);
     if (s < 0)
     {  perror ("Сокет не создан 1");   return 1;   }
     else cout << " Сокет образован " << endl;
    
     rc = connect (s, (struct sockaddr *) &peer, sizeof (peer));
     if (rc) 
     { perror ("Ошибка подключения -  2");  return 1; }
     rc = send (s, buf, sizeof(buf), 0);
    if (rc <=0) 
     { perror ("Ошибка передачи 3");  return 1; }
    else 
cout <<"Послано серверу следующее сообщение \n " << buf << endl;
    rc = recv (s, buf, 10, 0);
     if (rc <= 0) 
        {perror ("Ошибка приема от сервара 4"); return 1;}
     else
     {  cout << "Получено от сервера сообщение \n " <<  buf << endl;}
    int a ;     cin>>a;
    return 0;
}
Клиент2:
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
// client.cpp  
 
 
#include "stdafx.h" 
#include <sys/types.h>
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#include "iostream"
 
# pragma comment (lib, "ws2_32.lib")
# pragma comment (lib, "netapi32.lib")
 
using namespace std;
 
 int main(int argc, char* argv[])
{
     
     //char pota ='mama';
     struct sockaddr_in peer;
     SOCKET s, s1;
     int rc;
     char buf [10] = "Brother";
 
     WSADATA wsaData;
     int wsaret = WSAStartup (0x101, &wsaData);
     if (wsaret!=0) { return 0; }
 
     peer.sin_family = AF_INET;
     peer.sin_port = htons (7500);
     peer.sin_addr.s_addr = inet_addr ("127.0.0.1");
 
        s = socket (AF_INET, SOCK_STREAM, 0);
 
     if (s < 0)
     { 
         perror ("error socket  1");
         return 1;
     }
 
    // struct sockaddr * ss = (struct sockaddr *) &peer;
     
    rc = connect (s, (struct sockaddr *) &peer, sizeof (peer));
 
     if (rc) 
     {
         perror ("error connect  2");
         return 1;
     }
 
     rc = send (s, buf, sizeof(buf), 0);
 
 //    cout <<"from server" r<< buf << endl;
     
    if (rc <=0) 
     {
        perror ("error send 3");
            return 1;
     }
     
    else {  //printf ("From server PAPA\n", buf[0]);
        cout <<"Send to server is \n " << buf << endl;
        
     }
     
    rc = recv (s, buf, 10, 0);
     
     if (rc <= 0) 
        
        {
        perror ("error recv 4");
        return 1;
        }
     else
     {
        cout << "Receave from server \n " <<  buf << endl;
    }
    
    int a ;
    cin>>a;
    return 0;
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.05.2012, 18:01
Ответы с готовыми решениями:

Сервер не принимает клиента
Здравствуйте. Дико извиняюсь, если создал темку не там или похожий вопрос уже обсуждался. Прошу ткнуть носом на подобный вопрос, я почитаю....

Передать данные от клиента на сервер и наоборот
Не получаеться передать данные от клиента на сервер и наоборот, нет информации. Хотя они между собой соеденяються, этому свидетельствует...

Пересылка бинарного файла с клиента на сервер
Всем доброго времени суток. Есть 2 проги: сервер и клиент. С клиента на сервер посылается бинарный файл и исполняется на нем. Файл вводится...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.05.2012, 18:01
Помогаю со студенческими работами здесь

Клиент сервер Winsock + SDL. Форма клиента зависает
Проблема клиета: Форма SDL зацикливаеться циклом while и создается менюшка с кнопками и текстом тут все хорошо.Winsock тоже зацикливается...

Сервер принимает запрос от клиента только 1 раз (windows)
Всем привет, как заставить сервер принимать от клиента запрос и ждать следующего. В моей реализации сервер принимает запрос только...

Как из TCP пакета пришедшего на сервер выделить IP клиента
Как из TCP пакета пришедшего на сервер выделить IP клиента?? Где в передаваемом пакете на сервер будет находится ip клиента вначале или в...

Передача файлов с клиента на сервер
я реализовал передачу файлов по сети с сервера на клиент а как реализовать передачу обратно я использовал сервер сокет и клиент сокет ...

Передача картинки c клиента на сервер
Добрый вечер, нужно реализовать клиент-серверную программу, которая будет делать скриншоты и пересылать из клиента на сервер, с чего...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru