Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
96 / 96 / 21
Регистрация: 25.04.2012
Сообщений: 449

как заставить winsock работать через инет?

04.05.2013, 16:15. Показов 2218. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть клиент и сервер
клиент:
Кликните здесь для просмотра всего текста
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#pragma comment(lib, "wininet.lib")
#pragma comment(lib, "Ws2_32.lib")
#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
#include <iostream>
using namespace std;
struct ClietnAutorization
{
    char pwd[10];
    char Hfpwd[4];
    char x[6];
    char Hfpwdx[3];
    char login[32];
};
int main(int argc, char* argv[])
{
    WSADATA version;
    DWORD startErr = WSAStartup(0x0202, &version);
    if (startErr)
    {
        cerr << "Windows socket library isn't version 2.2";
        return 1;
    }
 
    SOCKET client;
 
    client = socket(AF_INET, SOCK_STREAM, 0);
 
    struct sockaddr_in address_server;
    address_server.sin_family = AF_INET;
    address_server.sin_addr.S_un.S_addr = htonl(INADDR_LOOPBACK);
    address_server.sin_port = htons(1024);
 
 
    int connectErr;
    connectErr = connect(client, (struct sockaddr *) &address_server, sizeof(sockaddr));
 
    if (connectErr == SOCKET_ERROR)
    {
        cout<<"Socket error"<<endl;
        return 2;
    }
 
 
    cout << "Connected" << endl;
    char buf[1024];
    memset(buf,0,1024);
 
    memcpy(buf, "hello\r\n", 7);
    send(client, buf, 1024, 0);
    cout << "Server response waitting..." << endl;
    memset(buf, 0, 1024);
    recv(client, buf, 1024, 0);
    cout << "Server response = " << buf;
    int err = 0;
    if (strnicmp(buf, "hello\r\n", 7)!=0)
        err = 1;
    bool end = false;
    string cmd;
    int i;
    if(err==0)
    {
        ClietnAutorization ca;
        memset(ca.Hfpwd,0,4);
        memset(ca.Hfpwdx,0,3);
        memset(ca.pwd,0,10);
        memset(ca.x,0,6);
        ca.Hfpwdx[0]=0; ca.Hfpwdx[1]='\r'; ca.Hfpwdx[2]='\n';
            memset(buf, 0, 1024);
        recv(client, buf, 1024, 0);
        if (strnicmp(buf, "Enter your login\r\n", 18)==0)
        {
            memset(ca.login,0,32);
           cout<<"Enter your login: "<<endl;
            cin.getline(ca.login,32);
 
            memset(buf,0,1024);
            memcpy(buf,"login ",6);
            memcpy(buf+6,ca.login,1000);
            cmd = buf;
            cmd += "\r\n";
            send(client, cmd.c_str(), cmd.size(), 0);
            memset(buf, 0, 1024);
            recv(client, buf, 1024, 0);
            cout << "Server response = " << buf;
            if (strnicmp(buf, "User not found\r\n", 16)==0)
            {
                err=1;
            }
        }
        else
        {
            err=1;
        }
        if(!err)
        {
        recv(client, buf, 1024, 0);
        if (strnicmp(buf, "x ", 2)==0)
        {
        memcpy(ca.x, buf+2, 6);
        memset(buf, 0, 1024);
        memset(ca.pwd,0,10);
        cout<<"Enter password: ";
        cin.getline(ca.pwd,9,'\n');
        ca.pwd[8]='\r'; ca.pwd[9]='\n';
    for(i=0;i<4;i++)
    {
        ca.Hfpwd[i]=ca.pwd[i]^ca.pwd[i+4];
        ca.Hfpwdx[0]=ca.Hfpwdx[0]^ca.x[i]^ca.Hfpwd[i];
    }
    ca.Hfpwdx[1]='\r'; ca.Hfpwdx[2]='\n';
    memset(buf, 0, 1024);
    memcpy(buf, "pwd ", 4);
    memcpy(buf+4, ca.Hfpwdx, 3);
    cmd = buf;
    cmd += "\r\n";
    send(client, cmd.c_str(), cmd.size(), 0);
    memset(buf, 0, 1024);
    recv(client, buf, 1024, 0);
    cout << "Server response = " << buf;
    if (strnicmp(buf, "Autorization failed\r\n", 21)==0)
        {
            err = 1;
            end = 1;
        }
        }
        else
        {
            err=1;
        }
        }
    }
    if(!end && !err)
    {
    cout<<"possible commands:"<<endl;
    cout<<" - number x (x-celoe chislo)"<<endl;
    cout<<" - min (vvedennblx chisel)"<<endl;
    cout<<" - goodbye (konec sessii)"<<endl;
    }
    while (!end && !err)
    {
            cout << "Enter command for server: " << endl;
            cin.getline(buf, 100);
 
            cmd = buf;
            cmd += "\r\n";
            send(client, cmd.c_str(), cmd.size(), 0);
            memset(buf, 0, 1024);
            recv(client, buf, 1024, 0);
            cout << "Server response = " << buf;
            if (strnicmp(buf, "Error command\r\n", 15)==0)
            {
                err = 1;
                end = 1;
            }
            else if (strnicmp(buf, "goodbye\r\n", 7)==0)
                end = 1;
 
    }
 
    closesocket(client);
 
    WSACleanup();
    return 0;
}

и сервер

Кликните здесь для просмотра всего текста
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
#pragma comment(lib, "wininet.lib")
#pragma comment(lib, "Ws2_32.lib")
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin;
int check(char *buf);
    struct ClientServiceThread
{
    SOCKET listener;
    SOCKET * socket_client;
    struct sockaddr_in * address_client;
    int clientMaxCount;
    int clientCount;
};
struct ClientExchangeThread
{
    ClientServiceThread * cst;
    int clientIndex;
};
struct ClietnAutorization
{
    char Hfpwd[4];
    char x[6];
    char Hfpwdx[3];
};
void reg(char *buf, int k)
{
    fstream file;
 
    int i;
    file.open("logins.txt", ios::app);
    char _buf[1024];
    memcpy(_buf, buf, 1024);
 
    if (k==0)
    {
        file<<"\r\n"<<_buf<<' ';
        file.close();
    }
    else
    {
        file<<_buf<<"\r\n";
        file.close();
    }
}
DWORD WINAPI ClientExchange(LPVOID data)
{
    srand((unsigned)time(NULL));
    ClientExchangeThread *cet = ((ClientExchangeThread*)data);
    ClientServiceThread *cst = cet->cst;
    int idx = cet->clientIndex;
    delete cet;
    char buf[1024];
    int err = 0;
    int i;
    memset(buf,0,1024);
    recv(cst->socket_client[idx], buf, 1024, 0);
        if (strnicmp(buf, "hello\r\n", 7)==0)
    {
        memset(buf,0,1024);
        memcpy(buf, "hello\r\n", 7);
        send(cst->socket_client[idx], buf, 1024, 0);
    }
    else
        err = 1;
    bool end = false;
    if(err==0)
    {
    ClietnAutorization ca;
    memset(buf,0,1024);
    memcpy(buf, "Enter your login\r\n", 1024);
    send(cst->socket_client[idx], buf, 1024, 0);
    memset(buf,0,1024);
    recv(cst->socket_client[idx], buf, 1024, 0);
 
     if (strnicmp(buf,"login ",6)==0)
    {
        char * _buf=new char[1024];
        memset(_buf,0,1024);
        memcpy(_buf,buf+6,32);
        memset(buf,0,1024);
        memcpy(buf,_buf,32);
        for(i=0;i<32;i++) {if(buf[i]=='\r'&&buf[i+1]=='\n') {buf[i]=0; buf[i+1]=0;}}
        delete _buf;
 
        int num=check(buf);
 
        if(num==0) {
            memset(ca.Hfpwd,0,4);
            memcpy(ca.Hfpwd,buf,4);
            memset(buf,0,1024);
            memcpy(buf, "Ok\r\n", 1024);
            send(cst->socket_client[idx], buf, 1024, 0);
        }
        else
        {
            memset(buf,0,1024);
            memcpy(buf, "User not found\r\n", 1024);
            send(cst->socket_client[idx], buf, 1024, 0);
            end=1;
            err=1;
        }
    }
    else
    {
        err=1;
        end=1;
    }
    if(!err&&!end)
    {
    ca.Hfpwdx[0]=0;
    ca.Hfpwdx[1]='\r'; ca.Hfpwdx[2]='\n';
    for(i=0;i<4;i++) {
        ca.x[i]=(rand()%256);
        if(ca.x[i]<0) ca.x[i]=-ca.x[i];
        ca.Hfpwdx[0]=ca.Hfpwdx[0]^ca.x[i]^ca.Hfpwd[i];
 
    }
    reg(ca.Hfpwdx,1);
    ca.x[4]='\r'; ca.x[5]='\n';
    memset(buf,0,1024);
    memcpy(buf,"x ",2);
    memcpy(buf+2,ca.x,6);
    send(cst->socket_client[idx], buf, 1024, 0);
    memset(buf,0,1024);
    recv(cst->socket_client[idx], buf, 1024, 0);
    if (strnicmp(buf,"pwd",3)==0)
    {
    reg(buf, 0);
    if (strnicmp(buf+4,ca.Hfpwdx,3)!=0) {
 
            err = 1;
            end = true;
            memset(buf,0,1024);
            memcpy(buf, "Autorization failed\r\n", 21);
            send(cst->socket_client[idx], buf, 1024, 0);
    }
    else {
        memset(buf,0,1024);
        memcpy(buf, "Success Autorization\r\n", 22);
        send(cst->socket_client[idx], buf, 1024, 0);
    }
    }
    else
    {
        err=1;
        end=1;
    }
    }
    }
    int x = 9999999;
    bool check=false;
    while (!end && !err)
    {
        memset(buf,0,1024);
        recv(cst->socket_client[idx], buf, 1024, 0);
        if (strnicmp(buf, "number ", 7)==0)
        {
            char* _buf = buf;
            while (*(++_buf) != '\r');
            *_buf = 0;
            if(atoi(buf+7)<x)
            {
            x=atoi(buf + 7);
            check=true;
            }
 
            memcpy(buf, "ok\r\n", 5);
            send(cst->socket_client[idx], buf, 1024, 0);
        }
        else  if (!strnicmp(buf, "min\r\n", 5))
        {
            if(check)
            {
            itoa(x, buf, 10);
            memcpy(buf + strlen(buf), "\r\n\x0", 3);
            x = 0;
            check=false;
            }
            else {
            memset(buf,0,1024);
            memcpy(buf, "Were are no numbers. Try again\r\n", 1024);
            }
            send(cst->socket_client[idx], buf, 1024, 0);
        }
        else if (!strnicmp(buf, "goodbye\r\n", 8))
        {
            memcpy(buf, "goodbye\r\n", 9);
            send(cst->socket_client[idx], buf, 1024, 0);
            end = true;
        }
        else
        {
            err = 1;
            end = true;
        }
    }
    if (err)
    {
        memset(buf,0,1024);
        memcpy(buf, "Error command\r\n", 16);
        send(cst->socket_client[idx], buf, 1024, 0);
    }
    cst->clientCount--;
    closesocket(cst->socket_client[idx]);
    cst->socket_client[idx] = INVALID_SOCKET;
    return 0;
}
DWORD WINAPI ClientService(LPVOID data)
{
    ClientServiceThread *cst = ((ClientServiceThread*)data);
    while (true)
    {
        int i;
        for (i = 0; i < cst->clientMaxCount; i++)
            if (cst->socket_client[i] == INVALID_SOCKET )
                break;
        if (i < cst->clientMaxCount)
                {
            int sz=sizeof(sockaddr);
            sizeof(sockaddr);
            cst->socket_client[i] = accept(cst->listener, (struct sockaddr *) cst->address_client + i, &sz);
            cst->clientCount++;
            ClientExchangeThread* cet = new ClientExchangeThread;
            cet->cst = cst;
            cet->clientIndex = i;
            DWORD cetThreadId;
            CreateThread(0, 0, &ClientExchange, cet, 0, &cetThreadId);
            Sleep(0);
        }
        else
            Sleep(500);
    }
}
 
void delacc()
{
    fstream file;
    file.open("logins.txt", ios::out);
    file << "";
    file.close();
}
 
void acclist(char* fname)
{
    ifstream file;
    file.open(fname, ios::in);
 
    char s[1024];
 
    while(!file.eof())
    {
        file.getline(s,100, '\n');
        cout << s << "\n";
    }
 
}
int check(char *buf)
{
    fin.open("logins.txt");
    fin.seekg(0);
    int found=-1;
    int i;
    bool end=false;
    char buf1[1024];
 
    while (fin.peek()!=-1&&!end)
    {
        i=0;
        memset(buf1,0,1024);
            while(fin.peek()!=' '&&fin.peek()!=-1)
            {
            fin>>buf1[i];
            i++;
            }
            fin.ignore(1,' ');
            if (strnicmp(buf, buf1, 1024)==0)
                {
                i=0;
                end=true;
                found=0;
                memset(buf,0,1024);
                while(fin.peek()!='\n'&&fin.peek()!=-1)
                {
                    fin>>buf[i];
                    i++;
                }
            }
            else
            {
                i=0;
                while(fin.peek()!='\n'&&fin.peek()!=-1)
                {
                    fin>>buf1[i];
                    i++;
                }
            }
            fin.ignore(1,'\n');
    }
    fin.close();
    return found;
}
 
int main(void)
{
    WORD myVRequiried=MAKEWORD(2,2);
    WSADATA myWData;
    DWORD err;
    err=WSAStartup(myVRequiried,&myWData);
    if(err)
    {
        if (err==WSASYSNOTREADY) cout<<"Network subsystem is not ready for network communication"<<endl;
        if(err==WSAVERNOTSUPPORTED) cout<<"Requested version of Windows Socket library is not supportet"<<endl;
        else cout<<"Error №"<<err<<endl;
        return 1;
    }
    ClientServiceThread* cst = new ClientServiceThread;
        cst->listener = socket (AF_INET, SOCK_STREAM, 0);
    if (cst->listener == INVALID_SOCKET)
    {
        cout<<"Error. INVALID_SOCKET"<<endl;
        return 1;
    }
 
    struct sockaddr_in address_server;
    address_server.sin_family = AF_INET;
    address_server.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
    address_server.sin_port = htons(1024);
        int bindErr = bind(cst->listener, (struct sockaddr *)&address_server, sizeof(address_server));
            if (bindErr ==SOCKET_ERROR)
    {
        cout<<"Error № "<<WSAGetLastError();
        return 1;
    }
 
    cst->clientMaxCount = 2;
    cst->clientCount = 0;
    cst->socket_client = new SOCKET[cst->clientMaxCount];
    for (int i = 0; i < cst->clientMaxCount; i++)
        cst->socket_client[i] = INVALID_SOCKET;
    cst->address_client = new struct sockaddr_in[cst->clientMaxCount];
    listen( cst->listener, cst->clientMaxCount);
 
    DWORD cstThreadId;
    HANDLE cstThread = CreateThread(0, 0, &ClientService, cst, 0, &cstThreadId);
    cout<<"Enter 'help' to view commands"<<endl;
    string s;
    char temp[1024];
    char nlog[1024], npas[16];
    bool exitServer = false;
    while (!exitServer)
    {
        cin.getline(temp,1024,'\n');
        s=string(temp);
        if (!strnicmp(s.c_str(), "exit", 5))
            break;
        else if (!strnicmp(s.c_str(), "view", 5))
        {
            cout << "Clients connected = " << cst->clientCount << endl;
            cout << "Clients max = " << cst->clientMaxCount << endl;
            for (int i = 0, _i = 0; i < cst->clientMaxCount; i++)
                if (cst->socket_client[i] != INVALID_SOCKET)
                {
                    cout << "\tData of client #" << _i++ << endl;
                    unsigned long cl_ip = ntohl(cst->address_client[i].sin_addr.S_un.S_addr);
                    unsigned short cl_port = ntohs(cst->address_client[i].sin_port);
                    cout << "\tip = " << (int)((unsigned char*)&cl_ip)[3] << '.' << (int)((unsigned char*)&cl_ip)[2] << '.' << (int)((unsigned char*)&cl_ip)[1] << '.' << (int)((unsigned char*)&cl_ip)[0] << endl;
                    cout << "\tport = " << cl_port << endl;
                }
            cout << endl;
        }
 
        else if (!strnicmp(s.c_str(), "new", 3))
        {
            cout<<"Enter new login:\n";
            cin.getline(nlog, 32, '\n');
            reg(nlog, 0);
            cout<<"Enter new password:\n";
            cin.getline(npas, 16, '\n');
            reg(npas, 1);
            cout<<"Complete!\n";
 
 
        }
        else if (!strnicmp(s.c_str(), "cls", 4))
        {
            system("cls");
            cout<<"Enter 'help' to view commands"<<endl;
        }
        else if (!strnicmp(s.c_str(), "del acc", 8)  )
        {
            delacc();
        }
        else if (!strnicmp(s.c_str(), "acc list", 9))
        {
            cout<<"Users list:";
            acclist("logins.txt");
        }
        //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
        else if(!strnicmp(s.c_str(), "help", 5))
        {
        cout<<"acc list - view all accounts"<<endl;
        cout<<"view - information about connections"<<endl;
        cout<<"new - create an account"<<endl;
        cout<<"cls - clear screen"<<endl;
        cout<<"del acc - delete account list"<<endl;
        cout<<"exit\n----"<<endl;
 
        }
        else
            cout << "unknown command" << std::endl;
    }
    return 0;
}

когда запускается сервер на одном компе, и клиенты на этом же компе, они успешно подключаются и всё работает.

как сделать, и что поменять, чтоб сервер запускался на одном компе(статик ip) и клиенты стучались в интернет к нему по прописанному ip,

Добавлено через 1 минуту
да, понимаю, что кода много, но сама суть то там в паре строчек настроек winsock, вроде вот в этих строчках из сервера
C++
1
2
3
4
 struct sockaddr_in address_server;
    address_server.sin_family = AF_INET;
    address_server.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
    address_server.sin_port = htons(1024);
что писать чтоб он принимал подключения из интернета?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.05.2013, 16:15
Ответы с готовыми решениями:

Как заставить программу работать через прокси?
Кто нибудь имеет примерчик как заставить готовую прогу (типа чата) работать с возможностью прокси? А то машины к инету через проксю...

Как заставить чат работать через Интернет
Здраствуйте программисты и просто пользователи. Недавно начал новый проект в visual basik но возникла проблемма чат работает только по...

Как WebBrowser заставить работать через Proxy
Как WebBrowser заставить работать через Proxy.

12
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
04.05.2013, 19:10
C++
1
address_server.sin_addr.S_un.S_addr = htonl(INADDR_LOOPBACK);
Поменяйте INADDR_LOOPBACK на реальный IP-адрес сервера.
И обязательно добавьте исключение для порта, который слушает сервер, в фаерволл Windows.
0
96 / 96 / 21
Регистрация: 25.04.2012
Сообщений: 449
04.05.2013, 19:16  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Поменяйте INADDR_LOOPBACK на реальный IP-адрес сервера.
И обязательно добавьте исключение для порта, который слушает сервер, в фаерволл Windows.
так, а ip надо в hex-виде туда передать в функцию же?
192.168.0.1 -> C0A80001
судя по этому сайту, так?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
04.05.2013, 19:20
Попробуйте так:
C++
1
address_server.sin_addr.S_un.S_addr = inet_addr("192.168.0.1");
Вместо 192.168.0.1 должен быть IP-адрес сервера.
0
96 / 96 / 21
Регистрация: 25.04.2012
Сообщений: 449
04.05.2013, 19:21  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Попробуйте так:
C++
1
address_server.sin_addr.S_un.S_addr = inet_addr("192.168.0.1");
Вместо 192.168.0.1 должен быть IP-адрес сервера.
еще я почитал, в похожей теме, что чтобы это работало, ip сервера должен быть белым, а не серым, и не за всякими nat и прочим. как это проверить?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
04.05.2013, 19:25
Цитата Сообщение от Tiva Посмотреть сообщение
еще я почитал, в похожей теме, что чтобы это работало, ip сервера должен быть белым, а не серым, и не за всякими nat и прочим.
Да, разумеется.
Чтобы соединиться с сервером напрямую (функция connect), нужно знать его IP.
Нет IP - нет коннекта.
192.168.0.1 - это адрес, зарезервированный для локальных сетей.
То есть, выполняя с клиентского компьютера connect на этот адрес, Вы попадаете в
локальную сеть клиента.
0
96 / 96 / 21
Регистрация: 25.04.2012
Сообщений: 449
04.05.2013, 19:29  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Да, разумеется.
Чтобы соединиться с сервером напрямую (функция connect), нужно знать его IP.
Нет IP - нет коннекта.
192.168.0.1 - это адрес, зарезервированный для локальных сетей.
То есть, выполняя с клиентского компьютера connect на этот адрес, Вы попадаете в
локальную сеть клиента.
та я знаю что это локальный адрес, я просто для примера спросил, правильно ли я перевел адрес.

а как проверить какой у меня ip другими средствами, кроме как практически(ну т.е. не проверять работает ли этот сервер или нет?)
0
 Аватар для dr.curse
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
04.05.2013, 19:32
через ipconfig
0
96 / 96 / 21
Регистрация: 25.04.2012
Сообщений: 449
04.05.2013, 19:36  [ТС]
Цитата Сообщение от aram_gyumri Посмотреть сообщение
через ipconfig
там довольно много чего выплыло..
Code
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
Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.
 
C:\Users\Tiva>ipconfig
 
Настройка протокола IP для Windows
 
 
Ethernet adapter Tunngle:
 
   Состояние среды. . . . . . . . : Среда передачи недоступна.
   DNS-суффикс подключения . . . . . :
 
Ethernet adapter Подключение по локальной сети:
 
   DNS-суффикс подключения . . . . . :
   Локальный IPv6-адрес канала . . . : fe80::153d:1c1e:176f:9d85%10
   IPv4-адрес. . . . . . . . . . . . : 192.168.0.4
   Маска подсети . . . . . . . . . . : 255.255.255.0
   Основной шлюз. . . . . . . . . : 192.168.0.1
 
Ethernet adapter Hamachi:
 
   DNS-суффикс подключения . . . . . :
   IPv6-адрес. . . . . . . . . . . . : 2620:9b::19ef:4804
   Локальный IPv6-адрес канала . . . : fe80::c195:71ec:aa69:3caa%16
   IPv4-адрес. . . . . . . . . . . . : 25.239.72.4
   Маска подсети . . . . . . . . . . : 255.0.0.0
   Основной шлюз. . . . . . . . . : 2620:9b::1900:1
                                       25.0.0.1
 
Ethernet adapter VMware Network Adapter VMnet1:
 
   DNS-суффикс подключения . . . . . :
   Локальный IPv6-адрес канала . . . : fe80::15fc:182e:5920:bb52%20
   IPv4-адрес. . . . . . . . . . . . : 192.168.246.1
   Маска подсети . . . . . . . . . . : 255.255.255.0
   Основной шлюз. . . . . . . . . :
 
Ethernet adapter VMware Network Adapter VMnet8:
 
   DNS-суффикс подключения . . . . . :
   Локальный IPv6-адрес канала . . . : fe80::a952:93b5:9121:7703%21
   IPv4-адрес. . . . . . . . . . . . : 192.168.163.1
   Маска подсети . . . . . . . . . . : 255.255.255.0
   Основной шлюз. . . . . . . . . :
 
Туннельный адаптер isatap.{0BD33258-E820-485C-BD54-9F0EFF7D3A10}:
 
   Состояние среды. . . . . . . . : Среда передачи недоступна.
   DNS-суффикс подключения . . . . . :
 
Туннельный адаптер Подключение по локальной сети*:
 
   Состояние среды. . . . . . . . : Среда передачи недоступна.
   DNS-суффикс подключения . . . . . :
 
Туннельный адаптер isatap.{CBA64156-3EA0-45ED-8FCC-3C50B29F01F0}:
 
   Состояние среды. . . . . . . . : Среда передачи недоступна.
   DNS-суффикс подключения . . . . . :
 
Туннельный адаптер isatap.{A7BF7A54-AE23-4FD2-80DC-5D5696AA97DB}:
 
   Состояние среды. . . . . . . . : Среда передачи недоступна.
   DNS-суффикс подключения . . . . . :
 
Туннельный адаптер isatap.{779EA863-D30D-4E96-BBAB-C32E6EF56034}:
 
   Состояние среды. . . . . . . . : Среда передачи недоступна.
   DNS-суффикс подключения . . . . . :
 
Туннельный адаптер isatap.{B16BE65C-B6FD-4FFB-A3DE-A1967A8CFE6D}:
 
   Состояние среды. . . . . . . . : Среда передачи недоступна.
   DNS-суффикс подключения . . . . . :
 
C:\Users\Tiva>
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
04.05.2013, 19:47
Цитата Сообщение от Убежденный Посмотреть сообщение
Да, разумеется.
Чтобы соединиться с сервером напрямую (функция connect), нужно знать его IP.
Нет IP - нет коннекта.
192.168.0.1 - это адрес, зарезервированный для локальных сетей.
То есть, выполняя с клиентского компьютера connect на этот адрес, Вы попадаете в
локальную сеть клиента.
Тоже интересует вопрос...
Вот к примеру есть реальный IP адресс (я так понимаю он должен быть статическим - т.е. выделенный адрес), вбиваю адрес в функцию, траляля... конект.
Но вот допустим, что у клиента есть реальный адрес, но так же клиент находится в локальной сети, как же тогда конектиться к нему? - Ведь 2 адреса будет, 1-реальный, который использует маршрутизатор и 2-локальный...
Например реальный 74.82.99.13, а в локальной у него 192.168.0.4 - я понимаю что в функцию записывается адресс реальный, но куда пихать локальный тогда?
0
 Аватар для dr.curse
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
04.05.2013, 19:49
Цитата Сообщение от Izual Посмотреть сообщение
но куда пихать локальный тогда?
а зачем куда-то пихать?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
04.05.2013, 20:01
Определить NAT можно только с помощью внешнего сервера (STUN).
Но еще проще позвонить своему интернет-провайдеру и узнать, какой тип IP,
есть ли NAT, прокси и т.п.
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
04.05.2013, 20:12
Цитата Сообщение от aram_gyumri Посмотреть сообщение
а зачем куда-то пихать?
В смысле "зачем" ?.. Сервер - допустим я, у меня дома выделенный айпи адрес. А клиент - например на работе, там же стоит маршрутизатор имеющий так же выделенный адрес, мне нужно послать сообщение одному из компьютеров подключённых к этому маршрутизатору, т.е. нужны 2 адреса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.05.2013, 20:12
Помогаю со студенческими работами здесь

Как заставить работать javascript через обработку форму?
У меня есть такая форма &lt;form action=&quot;report.php&quot; method=&quot;post&quot;&gt; &lt;input type=&quot;text&quot; name=&quot;firstName&quot; id=&quot;firstName&quot; /&gt; ...

Как заставить чат работать через Интернет, а не только в локальной сети
Вот есть чатик но он работает только по Локальной сети вот код: static void Main() { Application.Run(new Form1()); ...

Как заставить чат работать через интернет или в локальной сети?
What's up, программач. Я писал чат по видеоурокам одного парня с Австралии, на мой взгляд, все очень красиво и лаконично.Он работает в...

Как заставить сайт написанный на 5.3 заставить работать на 5.6? Как принудительно включить register_globals?
Есть древний сайт. Работает на php 5.3. Как объяснил разработчик данного сайта - все дело в register_globals, надо принудительно включить...

Как можно заставить работать php скрипты на третьем сайте при посещении первого (через второй)
Сразу к сути, вникните... А задача следующая. Есть 3 сайта... На первом из них размещаю картинку, ссылка в ней на второй сайт. Так...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru