Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: Сети
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
777Pasha777
4 / 4 / 0
Регистрация: 28.10.2013
Сообщений: 54
1

WinSock клиент не может подключиться к серверу

24.11.2015, 13:36. Просмотров 609. Ответов 4

Есть Сервер:
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Server.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        const int iReqWinsockVer = 2;
        WSADATA wsaData;
 
        if (WSAStartup(iReqWinsockVer,&wsaData)==0)
        {
                ShowMessage("Инициализация библиотеки сокета(Ws2_32.dll) удалась");
                SOCKET s;
                s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 
                if (s == INVALID_SOCKET)
                {
                        ShowMessage("При создании сокета возникла ошибка");
                }
                else
                {
                        ShowMessage("Создание сокета было успешным!");
                }
                sockaddr_in sockAddr;
                sockAddr.sin_family = AF_INET;
                sockAddr.sin_port = htons(1024);
                sockAddr.sin_addr.S_un.S_addr = INADDR_ANY/*inet_addr("169.254.171.107")*/;
 
                if (bind(s, (sockaddr*)(&sockAddr), sizeof(sockAddr))!=0)
                {
                        ShowMessage("Связывание адреса с socket’ом не произошло");
                }
                else
                {
                        ShowMessage("Связывание адреса с socket’ом было успешным!");
                }
                if (listen(s, SOMAXCONN)!=0)
                {
                        ShowMessage("Установка socket'а в режим прослушивания не удалось");
                }
                else
                {
                        ShowMessage("Установка socket'а в режим прослушивания было успешным!");
                }
 
                sockaddr_in remoteAddr;
                int RemoteAddrLen;
                SOCKET RemoteSocket;
 
                RemoteAddrLen = sizeof(remoteAddr);
                RemoteSocket = accept(s, (sockaddr*)&remoteAddr, &RemoteAddrLen);
 
                if (RemoteSocket==INVALID_SOCKET)
                {
                        ShowMessage("При создании сокета возникла ошибка");
                }
                else
                {
                        ShowMessage("Создание сокета было успешным!");
                }
                char buffer[128]; // Буфер содержащий данные для отправки
                buffer[0] = '3';
                ShowMessage(buffer[0]);
 
                while(true)
                {
                        if (send(RemoteSocket, buffer, sizeof(buffer), 0)==SOCKET_ERROR)
                        {
                                ShowMessage("При отправке данных возникла ошибка");
                        }
                        else
                        {
                                ShowMessage("Данные были доставлены успешно!");
                        }
                }
        }
        else
                ShowMessage("Инициализация библиотеки сокета(Ws2_32.dll) не удалась");
}
и Клиент:

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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Klient.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        const int iReqWinsockVer = 2;
        WSADATA wsaData;
 
        if (WSAStartup(iReqWinsockVer, &wsaData)==0)
        {
                ShowMessage("Инициализация библиотеки сокета(Ws2_32.dll) удалась");
                SOCKET hSocket;
                hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 
                if (hSocket==INVALID_SOCKET)
                {
                        ShowMessage("При создании сокета возникла ошибка");
                }
                else
                {
                        ShowMessage("Создание сокета было успешным!");
                }
                sockaddr_in sockAddr;
 
                sockAddr.sin_family = AF_INET;
                sockAddr.sin_port = htons(80);
                sockAddr.sin_addr.S_un.S_addr = inet_addr("192.168.5.222");
 
                if (connect(hSocket, (sockaddr*)(&sockAddr), sizeof(sockAddr))!=0)
                {
                        ShowMessage("Подключение к серверу не произошло");
                }
                else
                {
                        ShowMessage("Подключение к серверу было успешным");
                }
 
                char buffer[128];
                buffer[0] = '1';
                ShowMessage(buffer[0]);
 
                while(true)
                {
                        int bytesReceived = recv(hSocket, buffer, sizeof(buffer), 0);
 
                        if (bytesReceived==0)
                        {
                                ShowMessage("Данные полученны успешно!");
                                break;
                        }
                        else if (bytesReceived==SOCKET_ERROR)
                        {
                                ShowMessage("456");
                                ShowMessage("При получении данных произошла ошибка");
                        }
                        ShowMessage(buffer[0]);
                }
 
                ShowMessage(buffer[0]);
 
                if (WSACleanup()!=0)
                {
                        ShowMessage("Освобождение ресурсов WinSock не удалось");
                }
                else
                {
                        ShowMessage("Освобождение ресурсов WinSock завершилось успехом");
                }
                closesocket(hSocket);
        }
        else
                ShowMessage("Инициализация библиотеки сокета(Ws2_32.dll) не удалась");
}
Пишу в Borland C++ Builder 6. Код (программы) Сервера стоит на компе, а клиента на ноуте, комп и ноут связаны Ethernet кабелем. Проблема в том, что клиент не может подключиться к серверу. Пожалуйста помогите найти ошибки, или скажите чего не хватает, заранее спасибо.

Добавлено через 18 часов 39 минут
Всё проблема решена.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2015, 13:36
Ответы с готовыми решениями:

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

Передавать данные через WinSock серверу 10 раз в секунду
Пишу в Borland C++ Builder 6. Есть клиент он отправляет серверу данные через...

Обращение к удаленному серверу через прокси используя winsock
Здравствуйте. Подскажите, пожалуйста. Как можно обратиться к удаленному...

FTP клиент winsock
Помогити пожалуйста.не могу разобраться почему сервер не отправляет на сокет...

FTP клиент на WinSock
Здраствуйте! На курсовой задали написать FTP клиент с использованием WinAPI. C...

4
Илхом
2 / 2 / 0
Регистрация: 19.04.2015
Сообщений: 195
26.11.2015, 05:36 2
Цитата Сообщение от 777Pasha777 Посмотреть сообщение
Всё проблема решена.
может скинешь исправный код?
0
777Pasha777
4 / 4 / 0
Регистрация: 28.10.2013
Сообщений: 54
26.11.2015, 12:15  [ТС] 3
Сервер
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Server.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        const int iReqWinsockVer = 2; // Минимальная требуемая версия
        WSADATA wsaData;
 
        if (WSAStartup(iReqWinsockVer,&wsaData)==0)
        {
                ShowMessage("Инициализация библиотеки сокета(Ws2_32.dll) удалась");
                SOCKET hSocket;
                hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 
                if (hSocket==INVALID_SOCKET)
                {
                        ShowMessage("При создании сокета возникла ошибка");
                }
                else
                {
                        ShowMessage("Создание сокета было успешным!");
                }
 
                sockaddr_in sockAddr;
 
                sockAddr.sin_family = AF_INET;
                sockAddr.sin_port = htons(80);
                sockAddr.sin_addr.S_un.S_addr = INADDR_ANY; // используем адрес по умолчанию (т.е. любой)
 
                if (bind(hSocket, (sockaddr*)(&sockAddr), sizeof(sockAddr))!=0)
                {
                        ShowMessage("Связывание адреса с socket’ом не произошло");
                }
                else
                {
                        ShowMessage("Связывание адреса с socket’ом было успешным!");
                }
                if (listen(hSocket, SOMAXCONN)!=0)
                {
                        ShowMessage("Установка socket'а в режим прослушивания не удалось");
                }
                else
                {
                        ShowMessage("Установка socket'а в режим прослушивания было успешным!");
                }
 
                sockaddr_in remoteAddr;
                int iRemoteAddrLen;
                SOCKET hRemoteSocket;
 
                iRemoteAddrLen = sizeof(remoteAddr);
                hRemoteSocket = accept(hSocket, (sockaddr*)&remoteAddr, &iRemoteAddrLen);
 
                if (hRemoteSocket==INVALID_SOCKET)
                {
                        ShowMessage("При создании сокета возникла ошибка");
                }
                else
                {
                        ShowMessage("Создание сокета было успешным!");
                }
 
                char buffer[128];
                buffer[0] = '3';
 
                while(true)
                {
                        if (send(hRemoteSocket, buffer, sizeof(buffer), 0)==SOCKET_ERROR)
                        {
                                ShowMessage("При отправке данных возникла ошибка");
                        }
                        else
                        {
                                ShowMessage("Данные были доставлены успешно!");
                                break;
                        }
                }
 
                closesocket(hRemoteSocket);
                closesocket(hSocket);
 
                if (WSACleanup()!=0)
                {
                        ShowMessage("Освобождение ресурсов WinSock не удалось");
                }
                else
                {
                        ShowMessage("Освобождение ресурсов WinSock завершилось успехом");
                }
        }
        else
                ShowMessage("Инициализация библиотеки сокета(Ws2_32.dll) не удалась");
}
Клиент
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 <vcl.h>
#pragma hdrstop
 
#include "Klient.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        const int iReqWinsockVer = 2; // Минимальная требуемая версия
        WSADATA wsaData;
 
        if (WSAStartup(iReqWinsockVer,&wsaData)==0)
        {
                ShowMessage("Инициализация библиотеки сокета(Ws2_32.dll) удалась");
                SOCKET hSocket;
                hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 
                if (hSocket==INVALID_SOCKET)
                {
                        ShowMessage("При создании сокета возникла ошибка");
                }
                else
                {
                        ShowMessage("Создание сокета было успешным!");
                }
 
                sockaddr_in sockAddr;
 
                sockAddr.sin_family = AF_INET;
                sockAddr.sin_port = htons(80);
                sockAddr.sin_addr.S_un.S_addr = inet_addr("169.254.128.135"); // inet_addr("адрес сервера")
 
                if (connect(hSocket, (sockaddr*)(&sockAddr), sizeof(sockAddr))!=0)
                {
                        ShowMessage("Подключение к серверу не произошло");
                }
                else
                {
                        ShowMessage("Подключение к серверу было успешным");
                }
 
                char buffer[128];
                buffer[0] = '1';
                ShowMessage(buffer[0]); // Для проверки, измениться ли число
 
                while(true)
                {
                        int bytesReceived = recv(hSocket, buffer, sizeof(buffer), 0);
 
                        if (bytesReceived==0)
                        {
                                ShowMessage("Данные полученны успешно!");
                                ShowMessage(buffer[0]); // Если 3 то всё отлично
                                break;
                        }
                        else if (bytesReceived==SOCKET_ERROR)
                        {
                                ShowMessage("При получении данных произошла ошибка");
                        }
                }
 
                closesocket(hSocket);
 
                if (WSACleanup()!=0)
                {
                        ShowMessage("Освобождение ресурсов WinSock не удалось");
                }
                else
                {
                        ShowMessage("Освобождение ресурсов WinSock завершилось успехом");
                }
        }
        else
                ShowMessage("Инициализация библиотеки сокета(Ws2_32.dll) не удалась");
}
1
Илхом
2 / 2 / 0
Регистрация: 19.04.2015
Сообщений: 195
02.12.2015, 08:14 4
Цитата Сообщение от 777Pasha777 Посмотреть сообщение
#include "Klient.h"
откуда берутся klient.h и server.h?
0
777Pasha777
4 / 4 / 0
Регистрация: 28.10.2013
Сообщений: 54
02.12.2015, 21:09  [ТС] 5
Цитата Сообщение от Илхом Посмотреть сообщение
откуда берутся klient.h и server.h?
Это имена заголовочных файлов, куда записываются все элементы формы, а также можно там хранить глобальные переменные. Они сами прописываются когда создаешь и сохраняешь cpp файл определенным именем (в моем случае это klient.h и в другом проекте server.h) в Borland C++ Builder 6.

Вот код который записан klient.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//---------------------------------------------------------------------------
 
#ifndef KlientH
#define KlientH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <winsock2.h>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
1
02.12.2015, 21:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2015, 21:09

Клиент/сервер: клиент посылает серверу слово; определить, является ли это слово палиндромом
Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP....

Не выходит подключиться к серверу с клиента
Здравствуйте!Я недавно решил написать прогу клиент-сервер на c++.Вот код...

TCP-эхо клиент-сервер (WinSock)
Здравствуйте! Подскажите, пожалуйста, почему TCP-эхо клиент-сервер неправильно...


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

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

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