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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.58
3bOONAL
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 22
#1

Winsock C++ клиент - сервер - C++

03.06.2014, 23:43. Просмотров 2088. Ответов 8
Метки нет (Все метки)

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
#include <winsock2.h> // сервер
#include <iostream>
using namespace std;
 
int main(){
    // инициализация winsock
WSADATA WSAData;
if (WSAStartup (MAKEWORD(1,1), &WSAData)!=0)
{
    cout << "WSAStartup faild. Error:" << WSAGetLastError();
    return FALSE;
}
 
SOCKET s;
 
 if (INVALID_SOCKET == (s = socket (AF_INET, SOCK_STREAM, 0) ) )
   {
      // Error...
      cout<<  WSAGetLastError();
      // ... 
   }
 
 
 
 struct sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_port =htons(80);
    sin.sin_addr.s_addr = INADDR_ANY;
 
     int err = bind( s, (LPSOCKADDR)&sin, sizeof(sin) );
    err = listen( s, 100);
    
    for(;;) 
     {  
         char str[100];
    sockaddr_in from;
    int fromlen=sizeof(from);
    SOCKET  s1 = accept(s,(struct sockaddr*)&from, &fromlen);
     
   recv(s1, str, sizeof(str), 0 ); 
  cout<<str<<endl;
   closesocket(s1);
     } 
 
    WSACleanup();
 
 system("pause");
}


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
#include <winsock2.h> //клиент
#include <iostream>
using namespace std;
 
int main()
{
    WSADATA WSAData;
if (WSAStartup (MAKEWORD(1,1), &WSAData)!=0)
{
    cout << "WSAStartup faild. Error:" << WSAGetLastError();
    return FALSE;
}
 
SOCKET s1 = socket(AF_INET, SOCK_STREAM, 0);
 
 
 
        struct sockaddr_in anAddr;
        anAddr.sin_family = AF_INET;
        anAddr.sin_port = htons (80);
        anAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
 
        
            for(;;){
                Sleep(5000);
                connect(s1, (struct sockaddr *)&anAddr, sizeof(struct sockaddr));
        char str[100];
    cout<<"\n input str:"<<endl;
    cin>>str;
    
              send( s1, str,sizeof(str), 0 );  
 
            }
            closesocket(s1);
                WSACleanup();
 
               system("pause");
                return 0;
}
Здравствуйте! Помогите пожалуйста .-.
Вопрос: при вводе строки на клиенте , она должна выводится на сервере и процесс должен быть бесконечным, НО! один раз вывелось, а последующие не доходят до сервера. никак не пойму в чем проблема?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2014, 23:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Winsock C++ клиент - сервер (C++):

Клиент на WinSock и ошибка LNK1120 - C++
Добрый день. Вчера я обращался к форумчанам за помощью в сборке сервера. Теперь пытаюсь собрать клиент по примеру всё того же самоучителя...

Сервер-клиент - C++
Добрый всем вечер. есть код написанный на с. к сожалению код видимо с ошибкой. помогите пожалуйста найти её. ...

Клиент - сервер - C++
Необходимо написать программу типа клиент-сервер, смысл вот в чем в клиенте пользователь вводит сведения об автомобиле гос номер, название...

Клиент-сервер - C++
Дело такое: два компьютера соединены локальной сетью и имеют общую папку. Предположим, в ней есть две папки &quot;1&quot; и &quot;2&quot;, в каждой лежит по...

Клиент-сервер - C++
хотел написать клиент-серверное приложение,но никак не могу понят одну вещь. я хочу сделать клиент так,чтобы в нём было два Edit'а и...

Клиент-сервер - C++
Здравстуйте, мне нужно создать клиент-сервер на C++. В задании я могу использовать только MFC и Windows API, boost. Я читал, что есть...

8
Убежденный
Ушел с форума
Эксперт С++
15689 / 7199 / 1138
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
03.06.2014, 23:55 #2
А то, что клиент повторно вызывает connect на уже
подключенном сокете - это нормально ?
0
3bOONAL
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 22
04.06.2014, 00:00  [ТС] #3
Не заметил , я вот, пару часов назад только начал пробовать это все
0
Убежденный
Ушел с форума
Эксперт С++
15689 / 7199 / 1138
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
04.06.2014, 00:00 #4
И потом, сервер в строке 41 выводит принятую строку на консоль.
Но завершающего нуля в этой строке нет. Т.е. печататься там
может все, что угодно.
0
3bOONAL
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 22
04.06.2014, 00:06  [ТС] #5
исправил, и все равно 2 строку введенную на клиенте, сервер не выдает
0
Убежденный
Ушел с форума
Эксперт С++
15689 / 7199 / 1138
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
04.06.2014, 00:07 #6
Выкладывайте "исправленный" код.
0
3bOONAL
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 22
04.06.2014, 00:08  [ТС] #7
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
#include <winsock2.h> // сервер
#include <iostream>
using namespace std;
 
int main(){
    // инициализация winsock
WSADATA WSAData;
if (WSAStartup (MAKEWORD(1,1), &WSAData)!=0)
{
    cout << "WSAStartup faild. Error:" << WSAGetLastError();
    return FALSE;
}
 
SOCKET s;
 
 if (INVALID_SOCKET == (s = socket (AF_INET, SOCK_STREAM, 0) ) )
   {
      // Error...
      cout<<  WSAGetLastError();
      // ... 
   }
 
 
 
 struct sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_port =htons(80);
    sin.sin_addr.s_addr = INADDR_ANY;
 
     int err = bind( s, (LPSOCKADDR)&sin, sizeof(sin) );
    err = listen( s, 100);
    
    for(;;) 
     {  
         char str[100];
    sockaddr_in from;
    int fromlen=sizeof(from);
    SOCKET  s1 = accept(s,(struct sockaddr*)&from, &fromlen);
     
   recv(s1, str, sizeof(str), 0 ); 
  cout<<str<<"\0"<<endl;
   closesocket(s1);
     } 
 
    WSACleanup();
 
 system("pause");
}
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
#include <winsock2.h> // клиент
#include <iostream>
using namespace std;
 
int main()
{
    WSADATA WSAData;
if (WSAStartup (MAKEWORD(1,1), &WSAData)!=0)
{
    cout << "WSAStartup faild. Error:" << WSAGetLastError();
    return FALSE;
}
 
SOCKET s1 = socket(AF_INET, SOCK_STREAM, 0);
 
 
 
        struct sockaddr_in anAddr;
        anAddr.sin_family = AF_INET;
        anAddr.sin_port = htons (80);
        anAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
 connect(s1, (struct sockaddr *)&anAddr, sizeof(struct sockaddr));
        
            for(;;){
        char str[100];
    cout<<"\n input str:"<<endl;
    cin>>str;
              send( s1, str,sizeof(str), 0 );  
            }
            closesocket(s1);
                WSACleanup();
 
               system("pause");
                return 0;
}
0
Убежденный
Ушел с форума
Эксперт С++
15689 / 7199 / 1138
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
04.06.2014, 00:16 #8
Нет, снова неправильно. У Вас вот что получается (псевдокод):

Сервер:
а) забиндили сокет на адрес;
б) слушаем входящие коннекты;
в) приняли коннект - прочитали данные - закрыли соединение - goto пункт б)

Клиент:
а) создали сокет;
б) выполнили коннект;
в) шлем данные send-ом;
г) goto пункт в).

То есть, сервер хочет читать строку каждый раз через
новое соединение. А клиент пытается слать строку повторно
через уже установленное соединение. Несостыковочка.
Да, и поставьте в WSAStartup версию 2,2. 1,1 - давно устарело.
1
3bOONAL
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 22
04.06.2014, 00:37  [ТС] #9
Спасибо большое! Сейчас буду пробовать

Добавлено через 16 минут
то есть по логике, я не должен на сервере закрывать соединение .-. убрал closesocket у сервера, не помогло

Добавлено через 2 минуты
лол, разобрался, надо было аccept вынести за цикл )
0
04.06.2014, 00:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2014, 00:37
Привет! Вот еще темы с ответами:

Исходники клиент-сервер? - C++
Народ всем привет... скинте кому не сложно плиз листинг простейшего консольного рабочего клиент серврного приложения... мож у кого...

Сокеты, клиент-сервер - C++
Вопрос такой, примерно понял что такое сокеты, и вот надо программу наподобие сервер-клиент создать. То есть клиент- это некий процесс,...

Программы клиент-сервер - C++
Помогите, пожалуйста, написать 2 программы. Сервер - прослушивает сеть и выводит то что прислано. Клиент - отсылает сообщения. Надо...

TCP клиент/сервер - C++
Здравствуйте, прошу вашей помощи) нашел реализацию TCP клиента/сервера, все работает, но есть одно &quot;но&quot;. IP адрес в коде прописан через...


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

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

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