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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.58
3bOONAL
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 22
03.06.2014, 23:43     Winsock C++ клиент - сервер #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
#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;
}
Здравствуйте! Помогите пожалуйста .-.
Вопрос: при вводе строки на клиенте , она должна выводится на сервере и процесс должен быть бесконечным, НО! один раз вывелось, а последующие не доходят до сервера. никак не пойму в чем проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2014, 23:43     Winsock C++ клиент - сервер
Посмотрите здесь:

C++ Клиент-сервер
клиент-сервер C++
C++ Клиент - сервер
Сервер-клиент C++
TCP клиент/сервер C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14200 / 6215 / 986
Регистрация: 02.05.2013
Сообщений: 10,356
Завершенные тесты: 1
03.06.2014, 23:55     Winsock C++ клиент - сервер #2
А то, что клиент повторно вызывает connect на уже
подключенном сокете - это нормально ?
3bOONAL
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 22
04.06.2014, 00:00  [ТС]     Winsock C++ клиент - сервер #3
Не заметил , я вот, пару часов назад только начал пробовать это все
Убежденный
Системный программист
 Аватар для Убежденный
14200 / 6215 / 986
Регистрация: 02.05.2013
Сообщений: 10,356
Завершенные тесты: 1
04.06.2014, 00:00     Winsock C++ клиент - сервер #4
И потом, сервер в строке 41 выводит принятую строку на консоль.
Но завершающего нуля в этой строке нет. Т.е. печататься там
может все, что угодно.
3bOONAL
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 22
04.06.2014, 00:06  [ТС]     Winsock C++ клиент - сервер #5
исправил, и все равно 2 строку введенную на клиенте, сервер не выдает
Убежденный
Системный программист
 Аватар для Убежденный
14200 / 6215 / 986
Регистрация: 02.05.2013
Сообщений: 10,356
Завершенные тесты: 1
04.06.2014, 00:07     Winsock C++ клиент - сервер #6
Выкладывайте "исправленный" код.
3bOONAL
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 22
04.06.2014, 00:08  [ТС]     Winsock C++ клиент - сервер #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;
}
Убежденный
Системный программист
 Аватар для Убежденный
14200 / 6215 / 986
Регистрация: 02.05.2013
Сообщений: 10,356
Завершенные тесты: 1
04.06.2014, 00:16     Winsock C++ клиент - сервер #8
Нет, снова неправильно. У Вас вот что получается (псевдокод):

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

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

То есть, сервер хочет читать строку каждый раз через
новое соединение. А клиент пытается слать строку повторно
через уже установленное соединение. Несостыковочка.
Да, и поставьте в WSAStartup версию 2,2. 1,1 - давно устарело.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2014, 00:37     Winsock C++ клиент - сервер
Еще ссылки по теме:

клиент-сервер приложение передача потокового видео на сервер C++
C++ Клиент-сервер
C++ Клиент-сервер

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

Или воспользуйтесь поиском по форуму:
3bOONAL
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 22
04.06.2014, 00:37  [ТС]     Winsock C++ клиент - сервер #9
Спасибо большое! Сейчас буду пробовать

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

Добавлено через 2 минуты
лол, разобрался, надо было аccept вынести за цикл )
Yandex
Объявления
04.06.2014, 00:37     Winsock C++ клиент - сервер
Ответ Создать тему
Опции темы

Текущее время: 04:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru