powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите разобратся с IP адресами
14 сообщений из 39, страница 2 из 2
Помогите разобратся с IP адресами
    #34299660
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TCP не имеет доступа к заголовку IP-пакета, посему исходник сниффера фтопку
ты можешь определить кто с тобой установил соединение посредством accept

Но я подозреваю, что это далеко не единственная твоя ошибка. На твоем месте, я прикрепил бы к сообщению код полностью, а после этого спрашивал
...
Рейтинг: 0 / 0
Помогите разобратся с IP адресами
    #34299689
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
void WaitSocket()
{

// Ïðîöåäóðû èíèöèàëèçàöèè ñîêåòà
	CreateSocket();
	LinkSoketPort();
    LinkWindowScoket();


	int Errors;
	int Errors_sock;
    int cli_disc, clilen, rec;
    struct sockaddr_in cli_addr;
    int flag= 0 ;


    fd_set readfds;
    struct timeval tv;


// Ñîåäèíåíèå ñ SLL

  serv_sock = socket(PF_INET, SOCK_STREAM,  0 );
    
  sa.sin_family = AF_INET;
  sa.sin_port = htons(OUT_PORT);
  sa.sin_addr.s_addr = htonl((((((adr1 <<  8 ) | adr2) <<  8 ) | adr3) <<  8 ) | adr4);
  if (connect(serv_sock, (struct sockaddr *)&sa, sizeof sa) <  0 ) 
  {
      timer = time(NULL);
      tblock = localtime(&timer);
      printf("%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
      printf(" %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
      printf(" - Error : Don`t find server!!!\n\n");

        if((fl=fopen(den,"at"))==NULL)
        {
         fl=fopen(den,"w+");
        }
        fprintf(fl,"%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
        fprintf(fl," %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
        fprintf(fl," - Error : Don`t find server!!!\n\n");
        fclose(fl);
  }
  else
  {
        timer = time(NULL);
        tblock = localtime(&timer);

        if((fl=fopen(den,"at"))==NULL)
        {
         fl=fopen(den,"w+");
        }
        fprintf(fl,"%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
        fprintf(fl," %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
        fprintf(fl," - Find server!!!\n");
        fclose(fl);

        printf("%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
        printf(" %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
        printf(" - Find server!!!\n");


// Ïðîñëóøèâàíèå ñîêåòà
	Errors=listen(hListenSockTCP, MAXCONN);
	if ( Errors == SOCKET_ERROR)
	{
        timer = time(NULL);
        tblock = localtime(&timer);
        itoa(tblock->tm_yday,den, 10 );

        strcat(den,".log");

        if((fl=fopen(den,"at"))==NULL)
        {
         fl=fopen(den,"w+");
        }
        fprintf(fl,"%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
        fprintf(fl," %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
        fprintf(fl," - Listen BAD !!!\n");
        fclose(fl);
        printf("%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
        printf(" %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
		printf("  - Listen BAD !!! \n");
		exit( 1 );
	}
    timer = time(NULL);
    tblock = localtime(&timer);
        itoa(tblock->tm_yday,den, 10 );

        strcat(den,".log");

        if((fl=fopen(den,"at"))==NULL)
        {
         fl=fopen(den,"w+");
        }
        fprintf(fl,"%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
        fprintf(fl," %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
        fprintf(fl," - Wait to connected...\n");
        fclose(fl);

    printf("%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
    printf(" %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
	printf(" - Wait to connected...\n");

    flag_con= 0 ;
    flag_con2= 0 ;

    int sek;
    int time_sek;
    int fl_time;

    timer = time(NULL);
    tblock = localtime(&timer);

    int time_o;
    
    time_o=TIME_OUT/ 1000 ;

    sek=tblock->tm_sec;
    time_sek=sek+time_o;
    
    fl_time= 0 ;

    if (time_sek> 59 )
    {
      time_sek=time_sek- 59 ;
    }

    WSAAsyncSelect (hListenSockTCP,GetConsoleHWND(),WM_ASYNC_CLIENTEVENT,FD_ACCEPT|FD_READ|FD_CLOSE);
    do
    {
        timer = time(NULL);
        tblock = localtime(&timer);
        
        sek=tblock->tm_sec;
                
        if(time_sek==sek)
        {
               time_sek=sek+time_o;
               if (time_sek> 59 )
                {
                     time_sek=time_sek- 59 ;                                      
                }               
                Errors_sock = send(serv_sock, "",  0 ,  1 );
                if(Errors_sock == - 1 )
                {
                   fl_time= 1 ;                       
                }
                else
                {
                   fl_time= 0 ;
                }
        }
        if(fl_time!= 0 )
        {
         if(flag_con== 0 )
         {
                  itoa(tblock->tm_yday,den, 10 );

                  strcat(den,".log");

                  if((fl=fopen(den,"at"))==NULL)
                  {
                    fl=fopen(den,"w+");
                  }
                  fprintf(fl,"%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
                  fprintf(fl," %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
                  fprintf(fl," - Error SERVER Socket...!!!\n");
                  fclose(fl);

                  printf("%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
                  printf(" %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
                  printf(" - Error SERVER Socket...\n");

                  flag_con= 1 ;
         }
         closesocket(hListenSockTCP);

         sleep(TIME_OUT);
         int fl;
         do
         {
         
          serv_sock = socket(PF_INET, SOCK_STREAM,  0 );
         
          sa.sin_family = AF_INET;
          sa.sin_port = htons(OUT_PORT);
          sa.sin_addr.s_addr = htonl((((((adr1 <<  8 ) | adr2) <<  8 ) | adr3) <<  8 ) | adr4);
         
          fl= 0 ;
          if (connect(serv_sock, (struct sockaddr *)&sa, sizeof sa) <  0 ) 
          {
                    timer = time(NULL);
                    tblock = localtime(&timer);

                    if(flag_con2== 0 )
                    {
                      itoa(tblock->tm_yday,den, 10 );

                      strcat(den,".log");

                      if((fl=fopen(den,"at"))==NULL)
                      {
                        fl=fopen(den,"w+");
                      }
                      fprintf(fl,"%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
                      fprintf(fl," %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
                      fprintf(fl," - Error!!! Don`t find server...!!!\n");
                      fclose(fl);
                    
                      printf("%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
                      printf(" %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
                      printf(" - Error!!! Don`t find server...\n");
                      flag_con2= 1 ;
                  }  
                  fl= 1 ;
          }
          else
          {
                  timer = time(NULL);
                  tblock = localtime(&timer);
                  printf("%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
                  printf(" %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
                  printf(" - Find server!!!\n");

                  flag_con= 0 ;
                  flag_con2= 0 ;

                  fl_time= 0 ;

                  time_sek=sek+time_o;
                  if (time_sek> 59 )
                  {
                     time_sek=time_sek- 59 ;                                      
                  }               

                  itoa(tblock->tm_yday,den, 10 );

                  strcat(den,".log");

                  if((fl=fopen(den,"at"))==NULL)
                  {
                    fl=fopen(den,"w+");
                  }
                  fprintf(fl,"%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
                  fprintf(fl," %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
                  fprintf(fl," - Find server!!!\n");
                  fclose(fl);
                  
                  if (flag_buf== 1 )
                  {
                                  send(serv_sock, save_buf, strlen(save_buf),  0 );
                  }
                  
                  CreateSocket();
                  LinkSoketPort();
                  LinkWindowScoket();

                  Errors=listen(hListenSockTCP, MAXCONN);
                  if ( Errors == SOCKET_ERROR)
                  {
                        timer = time(NULL);
                        tblock = localtime(&timer);
                        printf("%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
                        printf(" %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
                  		printf(" - Listen BAD !!! \n");

                        itoa(tblock->tm_yday,den, 10 );
                        
                        strcat(den,".log");

                        if((fl=fopen(den,"at"))==NULL)
                        {
                         fl=fopen(den,"w+");
                        }
                        fprintf(fl,"%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
                        fprintf(fl," %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
                        fprintf(fl," - Listen BAD !!!\n");
                        fclose(fl);
                    	exit( 1 );
                  }
                  timer = time(NULL);
                  tblock = localtime(&timer);

                  itoa(tblock->tm_yday,den, 10 );

                  strcat(den,".log");

                  if((fl=fopen(den,"at"))==NULL)
                  {
                    fl=fopen(den,"w+");
                  }
                  fprintf(fl,"%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
                  fprintf(fl," %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
                  fprintf(fl," - Wait to connected...\n");
                  fclose(fl);

                  printf("%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
                  printf(" %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
                  printf(" - Wait to connected...\n");
                  fl= 1 ;
          }
         }
         while(fl== 0 );
        }
        else
        {
        cli_disc = accept(hListenSockTCP,(struct sockaddr *) &cli_addr, &clilen);
        if(cli_disc != - 1 ) 
        {
           do
           {
                      flag= 0 ;
                      rec = recv(cli_disc, buf, sizeof(buf),  0 );
                      if(rec> 0 ) 
                      {

                                  timer = time(NULL);
                                  tblock = localtime(&timer);
                                  printf("%02d:%02d:%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
                                  printf(" %02d:%02d:%02d ",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
                                                            	     
                                  itoa(tblock->tm_yday,den, 10 );

                                  strcat(den,".log");

                                  if((fl=fopen(den,"at"))==NULL)
                                  {
                                   fl=fopen(den,"w+");
                                  }
                                  fprintf(fl,"%02d.%02d.%02d",tblock->tm_mday,tblock->tm_mon+ 1 ,tblock->tm_year+ 1900 );
                                  fprintf(fl," %02d:%02d:%02d",tblock->tm_hour,tblock->tm_min,tblock->tm_sec);
                          	     
//                                  printf("Rec : %d", rec);
                                  IPHeader* hdr = (IPHeader *)buf;

                                  //Íà÷èíàåì ðàçáîð ïàêåòà...
//                                  printf("\tHdr : %d",hdr);
//                                  printf("\tCli_disc : %d",cli_disc);

                                  // Ïðåîáðàçóåì â ïîíÿòíûé âèä àäðåñ îòïðàâèòåëÿ.
                                  printf(" From : ");
                                  pack_adr.s_addr = hdr->iph_src;
                                  printf(inet_ntoa(pack_adr));

                                  fprintf(fl," - From : ");
                                  fprintf(fl,inet_ntoa(pack_adr));

                                  // Ïðåîáðàçóåì â ïîíÿòíûé âèä àäðåñ ïîëó÷àòåëÿ.
                                  printf(" To : ");
                                  pack_adr.s_addr = hdr->iph_dest;
                                  printf(inet_ntoa(pack_adr));

                                  fprintf(fl," To : ");
                                  fprintf(fl,inet_ntoa(pack_adr));

                                  // Âû÷èñëÿåì ðàçìåð ïàêåòà?!?!?!?!?!?!
                                  printf(" Size: ");
//                                  lowbyte = hdr->iph_length>>8;
//                                  hibyte = hdr->iph_length<<8;
//                                  hibyte = hibyte + lowbyte;

                                  pack_size=strlen(buf);
                                  printf("%d",pack_size);
                                  printf(" byte");

                                  fprintf(fl," Size : ");
                                  fprintf(fl,"%d",pack_size);
                                  fprintf(fl," byte");


/*                                  printf("\tPacket : ");

                                  for(i=0; i<rec; i++)
                                  {
                                     printf("%c",buf[i]);
                                  }*/

                                  Errors_sock = send(serv_sock, buf, rec,  0 );

                                  flag_buf= 0 ;
                                  if (Errors_sock< 0 )
                                  {
                                                    flag_buf= 1 ;
                                                    strcpy(save_buf,buf);
                                  }

//                                  printf("Socket sostoyanie : %d",Errors_sock);

                                  printf("\n");
                                  fprintf(fl,"\n");

                                  fclose(fl);

                                  flag= 1 ;
                      }
           }
           while(flag== 0 );
         }
        }   
    }
    while( 1 );

  }
  close(serv_sock);

}

Вот процедура, где организуется прослушивание сокета...
...
Рейтинг: 0 / 0
Помогите разобратся с IP адресами
    #34299696
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жость
...
Рейтинг: 0 / 0
Помогите разобратся с IP адресами
    #34299732
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)жость

По тому и спрашиваю :( Не работал я никогда с сокетами, а документацию нормально найти не могу, так как заставили писать не на Си++ а на обычном Си, плюс в основном вся инфа заканчивается на том, как организовать прослушивание или отправить сообщение, а как данное сообщение обработать примеров нет...

В теории у каждого сообщения должна быть служебная информация, но как к ней получить доступ не могу понять.
...
Рейтинг: 0 / 0
Помогите разобратся с IP адресами
    #34299734
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.: Не ругайтесь сильно, все ведь с чего-то начинали, не все же рождаются гениями :(
...
Рейтинг: 0 / 0
Помогите разобратся с IP адресами
    #34299789
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В TCP нет служебной информации. Для ТЕБЯ это просто поток байт данных.
Единственное место где сервер узнает кто с ним соединился это accept, подробности можешь посмотреть в MSDN. Я очень сильно удивлюсь если тот УЖОС что ты сюда запостил заработает, но отдаю должное твоему трудолюбию

P.S. И нафига тебе вперлось WSA можешь объяснить ???
...
Рейтинг: 0 / 0
Помогите разобратся с IP адресами
    #34299802
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень советую найти и почитать это , то что Unix можешь не обращать внимания.
...
Рейтинг: 0 / 0
Помогите разобратся с IP адресами
    #34299839
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите разобратся с IP адресами
    #34299899
SnowMan2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример из старых запасов, вроде работает. Сейчас пишу на Builder-e, там несколько иначе и проще.

Пример состоит из двух программ: сервер и клиент, у каждого по 3 файла:

tcp_serv.c:
Код: plaintext
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.
#include	<windows.h>
#include	<windowsx.h>
#include	<string.h>
#include	<winsock.h>
#include	"tcp_serv.h"


LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL				WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct);
void				WndProc_OnDestroy(HWND hWnd);
void				WndProc_OnCommand(HWND hWnd, int id, HWND hWndCtrl, UINT codeNotify);
void				WndProc_OnSize(HWND hWnd, UINT state, int cx, int cy);
void				ServerStart(HWND hWnd);
void				ServerStop(HWND hWnd);
void				WndProc_OnWSAAccept(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
void				WndProc_OnWSANetEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

#define	SERV_PORT		 5000 
#define	IDS_STATUSBAR	 802 
#define	WSA_ACCEPT	(WM_USER+ 1 )
#define	WSA_NETEVENT	(WM_USER+ 2 )

HINSTANCE	hInst;
char			szAppName[]  = "TCP/IP Server";
char			szAppTitle[] = "TCP/IP Server";
//HWND		hWndSB;
SOCKET		srv_socket;
int			acc_sin_len;
SOCKADDR_IN	acc_sin;
SOCKADDR_IN	local_sin;

#pragma	argsused
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
							LPSTR lpCmdLine, int nCmdShow)
{
 WNDCLASS		wc;
 HWND		hWnd;
 MSG			msg;

 hInst = hInstance;
 hWnd = FindWindow(szAppName, NULL);
 if (hWnd) return NULL;

 memset(&wc,  0 , sizeof(wc));
 wc.style = CS_HREDRAW | CS_VREDRAW;
 wc.lpfnWndProc = (WNDPROC)WndProc;
 wc.hInstance = hInst;
 wc.hCursor = LoadCursor(NULL, IDC_ARROW);
 wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+ 1 );
 wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
 wc.lpszClassName = szAppName;
 if (!RegisterClass(&wc)) {
		MessageBox(NULL, "Не удалось зарегистрировать класс окна", "", MB_OK);
		return FALSE;
 } // if
 hWnd = CreateWindow(
	szAppName,
	szAppTitle,
	WS_OVERLAPPEDWINDOW,
	CW_USEDEFAULT,
	 0 ,
	CW_USEDEFAULT,
	 0 ,
	NULL,
	NULL,
	hInst,
	NULL);
 if (!hWnd) {
	MessageBox(NULL, "Не удалось создать окно", "", MB_OK);
	return FALSE;
 } // if
 ShowWindow(hWnd, nCmdShow);
 UpdateWindow(hWnd);
 while (GetMessage(&msg, NULL,  0 ,  0 )) {
	TranslateMessage(&msg);
	DispatchMessage(&msg);
 } // while
 return msg.wParam;
} // WndMain

//***************************************************************************

#pragma	argsused
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 switch (msg) {
	case WSA_ACCEPT:
		WndProc_OnWSAAccept(hWnd, msg, wParam, lParam);
		break;
	case WSA_NETEVENT:
		WndProc_OnWSANetEvent(hWnd, msg, wParam, lParam);
		break;
	HANDLE_hWnd, WM_CREATE, WndProc_OnCreate;
	HANDLE_hWnd, WM_DESTROY, WndProc_OnDestroy;
	HANDLE_hWnd, WM_COMMAND, WndProc_OnCommand;
	HANDLE_hWnd, WM_SIZE, WndProc_OnSize;
	default: return DefWindowProc(hWnd, msg, wParam, lParam);
 } // switch
 return NULL;
} // WndProc

//***************************************************************************

#pragma	argsused
BOOL				WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)
{
 int		rc;
 WSADATA	WSAData;
 //char	szTemp[128];

 rc = WSAStartup(MAKEWORD( 1 , 1 ), &WSAData);
 if (rc !=  0 ) {
	MessageBox(hWnd, "Ошибка инициализации WSA", "", MB_OK);
	return FALSE;
 } // if

 return TRUE;
} // WndProc_OnCreate

//***************************************************************************

#pragma	argsused
void				WndProc_OnDestroy(HWND hWnd)
{

 WSACleanup();
 PostQuitMessage( 0 );
 FORWARD_WM_DESTROY(hWnd, DefWindowProc);
} // WndProc_OnDestroy

//***************************************************************************

#pragma	argsused
void				WndProc_OnCommand(HWND hWnd, int id, HWND hWndCtrl, UINT codeNotify)
{
 switch (id) {
	case	IDM_EXIT:
		DestroyWindow(hWnd);
		break;
	case	IDM_START:
		ServerStart(hWnd);
		break;
	case	IDM_STOP:
		ServerStop(hWnd);
		break;
	default:
		MessageBox(hWnd, "Неизвесная команда", "Ошибка", MB_OK);
 } // switch;
 FORWARD_WM_COMMAND(hWnd, id, hWndCtrl, codeNotify, DefWindowProc);
} // WndProc_OnCommand

//***************************************************************************

#pragma	argsused
void				WndProc_OnSize(HWND hWnd, UINT state, int cx, int cy)
{
 //SendMessage(hWndSB, WM_SIZE, cx, cy);
 FORWARD_WM_SIZE(hWnd, state, cx, cy, DefWindowProc);
} // WndProc_OnSize

//***************************************************************************

#pragma	argsused
void				WndProc_OnWSAAccept(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 int	rc;

 if (WSAGETSELECTERROR(lParam) !=  0 ) {
	MessageBox(hWnd, "Ошибка соединения 1", "Ошибка", MB_OK);
	WSAAsyncSelect(srv_socket, hWnd,  0 ,  0 );
	return;
 } // if

 acc_sin_len = sizeof(acc_sin);
 srv_socket = accept(srv_socket, (LPSOCKADDR)&acc_sin, (int FAR *)&acc_sin_len);
 if (srv_socket == INVALID_SOCKET) {
	MessageBox(hWnd, "Ошибка соединения 2", "Ошибка", MB_OK);
	return;
 } // if
 rc = WSAAsyncSelect(srv_socket, hWnd, WSA_NETEVENT, FD_READ|FD_CLOSE);
 if (rc >  0 ) {
	MessageBox(hWnd, "Ошибка WSAAsyncSelect", "Ошибка", MB_OK);
	closesocket(srv_socket);
	return;
 } // if

} // WndProc_OnWSAAccept

//***************************************************************************

#pragma	argsused
void				WndProc_OnWSANetEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 char	szTmp[ 256 ];
 int		rc;

 if (WSAGETSELECTEVENT(lParam) == FD_READ) {
	rc = recv((SOCKET)wParam, szTmp,  256 ,  0 );
	if (rc) {
		szTmp[rc] =  0 ;
		MessageBox(hWnd, szTmp, "Принятые данные", MB_OK);
	} // if
	return;
 } // if
 if (WSAGETSELECTEVENT(lParam) == FD_CLOSE) {
	MessageBox(hWnd, "Связь прервана", "Сервер", MB_OK);
 } // if

} // WndProc_OnWSANetEvent

//***************************************************************************

#pragma	argsused
void				ServerStart(HWND hWnd)
{
 struct sockaddr_in	srv_address;
 int				rc;

 srv_socket = socket(AF_INET, SOCK_STREAM,  0 );
 if (srv_socket == INVALID_SOCKET) {
	MessageBox(hWnd, "Ошибка при открытии сокета", "Ошибка", MB_OK);
	return;
 } // if

 srv_address.sin_family = AF_INET;
 srv_address.sin_addr.s_addr = INADDR_ANY;
 srv_address.sin_port = htons(SERV_PORT);

 if (bind(srv_socket, (LPSOCKADDR)&srv_address, sizeof(srv_address)) == SOCKET_ERROR) {
	MessageBox(hWnd, "Адресная ошибка", "Ошибка", MB_OK);
	closesocket(srv_socket);
	return;
 } // if

 if (listen(srv_socket,  1 ) == SOCKET_ERROR) {
	MessageBox(hWnd, "Ошибка при установке в режим приема", "Ошибка", MB_OK);
	closesocket(srv_socket);
	return;
 } // if

 rc = WSAAsyncSelect(srv_socket, hWnd, WSA_ACCEPT, FD_ACCEPT);
 if (rc >  0 ) {
	MessageBox(hWnd, "Ошибка WSAAsyncSelect", "Ошибка", MB_OK);
	closesocket(srv_socket);
	return;
 } // if

 MessageBox(hWnd, "Сервер запущен", "Информация", MB_OK);

} // ServerStart

//***************************************************************************

#pragma	argsused
void				ServerStop(HWND hWnd)
{
 WSAAsyncSelect(srv_socket, hWnd,  0 ,  0 );
 if (srv_socket != INVALID_SOCKET) {
	closesocket(srv_socket);
 } // if

 MessageBox(hWnd, "Сервер остановлен", "Информация", MB_OK);

} // ServerStop

tcp_serv.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#define	IDI_APPICON		 101 
#define	IDI_APPICON_SM		 102 
#define	IDR_MENU1			 103 
#define	IDM_START			 4001 
#define	IDM_EXIT			 4002 
#define	IDM_STOP			 4003 

#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define	_APS_NO_MFC			 1 
#define	_APS_NEXT_RESOURCE_VALUE	 106 
#define	_APS_NEXT_COMMAND_VALUE	 4004 
#define	_APS_NEXT_CONTROL_VALUE	 1000 
#define	_APS_NEXT_SYMED_VALUE	 101 
#endif
#endif

tcp_serv.rc
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#include	"tcp_serv.h"

#define APSTUDIO_READONLY_SYMBOLS
//#include	"afxres.h"
#undef  APSTUDIO_READONLY_SYMBOLS

IDR_MENU1	MENU	DISCARDABLE
BEGIN
	POPUP	"&File"
	BEGIN
		MENUITEM	"&Start server"	IDM_START
		MENUITEM	"S&top server"      IDM_STOP
		MENUITEM	SEPARATOR
		MENUITEM	"&Exit"			IDM_EXIT
	END
END

tcp_clnt.c
Код: plaintext
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.
#include	<windows.h>
#include	<windowsx.h>
#include	<string.h>
#include	<winsock.h>
#include	"tcp_clnt.h"


LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL				WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct);
void				WndProc_OnDestroy(HWND hWnd);
void				WndProc_OnCommand(HWND hWnd, int id, HWND hWndCtrl, UINT codeNotify);
void				WndProc_OnSize(HWND hWnd, UINT state, int cx, int cy);
void				SetConnection(HWND hWnd);
void				SendMsg(HWND hWnd);
void				WndProc_OnWSAAccept(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
void				WndProc_OnWSANetEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

#define	SERV_PORT		 5000 
#define	IDS_STATUSBAR	 802 

HINSTANCE	hInst;
char			szAppName[]  = "TCP/IP Client";
char			szAppTitle[] = "TCP/IP Client";
SOCKET		srv_socket;
//int		acc_sin_len;
//SOCKADDR_IN	acc_sin;
SOCKADDR_IN	local_sin;
SOCKADDR_IN	dest_sin;

#pragma	argsused
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
							LPSTR lpCmdLine, int nCmdShow)
{
 WNDCLASS		wc;
 HWND		hWnd;
 MSG			msg;

 hInst = hInstance;
 hWnd = FindWindow(szAppName, NULL);
 if (hWnd) return NULL;

 memset(&wc,  0 , sizeof(wc));
 wc.style = CS_HREDRAW | CS_VREDRAW;
 wc.lpfnWndProc = (WNDPROC)WndProc;
 wc.hInstance = hInst;
 wc.hCursor = LoadCursor(NULL, IDC_ARROW);
 wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+ 1 );
 wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
 wc.lpszClassName = szAppName;
 if (!RegisterClass(&wc)) {
		MessageBox(NULL, "Не удалось зарегистрировать класс окна", "", MB_OK);
		return FALSE;
 } // if
 hWnd = CreateWindow(
	szAppName,
	szAppTitle,
	WS_OVERLAPPEDWINDOW,
	CW_USEDEFAULT,
	 0 ,
	CW_USEDEFAULT,
	 0 ,
	NULL,
	NULL,
	hInst,
	NULL);
 if (!hWnd) {
	MessageBox(NULL, "Не удалось создать окно", "", MB_OK);
	return FALSE;
 } // if
 ShowWindow(hWnd, nCmdShow);
 UpdateWindow(hWnd);
 while (GetMessage(&msg, NULL,  0 ,  0 )) {
	TranslateMessage(&msg);
	DispatchMessage(&msg);
 } // while
 return msg.wParam;
} // WndMain

//***************************************************************************

#pragma	argsused
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 switch (msg) {
	HANDLE_hWnd, WM_CREATE, WndProc_OnCreate;
	HANDLE_hWnd, WM_DESTROY, WndProc_OnDestroy;
	HANDLE_hWnd, WM_COMMAND, WndProc_OnCommand;
	HANDLE_hWnd, WM_SIZE, WndProc_OnSize;
	default: return DefWindowProc(hWnd, msg, wParam, lParam);
 } // switch
 //return NULL;
} // WndProc

//***************************************************************************

#pragma	argsused
BOOL				WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)
{
 int		rc;
 WSADATA	WSAData;

 rc = WSAStartup(MAKEWORD( 1 , 1 ), &WSAData);
 if (rc !=  0 ) {
	MessageBox(hWnd, "Ошибка инициализации WSA", "", MB_OK);
	return FALSE;
 } // if

 return TRUE;
} // WndProc_OnCreate

//***************************************************************************

#pragma	argsused
void				WndProc_OnDestroy(HWND hWnd)
{

 WSACleanup();
 PostQuitMessage( 0 );
 FORWARD_WM_DESTROY(hWnd, DefWindowProc);
} // WndProc_OnDestroy

//***************************************************************************

#pragma	argsused
void				WndProc_OnCommand(HWND hWnd, int id, HWND hWndCtrl, UINT codeNotify)
{
 switch (id) {
	case	IDM_EXIT:
		DestroyWindow(hWnd);
		break;
	case	IDM_CONNECT:
		SetConnection(hWnd);
		break;
	case	IDM_SEND:
		SendMsg(hWnd);
		break;
	default:
		MessageBox(hWnd, "Неизвесная команда", "Ошибка", MB_OK);
 } // switch;
 FORWARD_WM_COMMAND(hWnd, id, hWndCtrl, codeNotify, DefWindowProc);
} // WndProc_OnCommand

//***************************************************************************

#pragma	argsused
void				WndProc_OnSize(HWND hWnd, UINT state, int cx, int cy)
{
 FORWARD_WM_SIZE(hWnd, state, cx, cy, DefWindowProc);
} // WndProc_OnSize

//***************************************************************************

#pragma	argsused
void				SetConnection(HWND hWnd)
{
 PHOSTENT		phe;
 //struct sockaddr_in	srv_address;
 //int				rc;

 srv_socket = socket(AF_INET, SOCK_STREAM,  0 );
 if (srv_socket == INVALID_SOCKET) {
	MessageBox(hWnd, "Ошибка при открытии сокета", "Ошибка", MB_OK);
	return;
 } // if

 phe = gethostbyname("localhost");
 if (phe == NULL) {
	MessageBox(hWnd, "Ошибка в имени компьютера", "Ошибка", MB_OK);
	closesocket(srv_socket);
	return;
 } // if

 memcpy((char FAR *)&(dest_sin.sin_addr), phe->h_addr, phe->h_length);


 dest_sin.sin_family = AF_INET;
 dest_sin.sin_addr.s_addr = inet_addr("127.0.0.1");
 dest_sin.sin_port = htons(SERV_PORT);
 
 if (connect(srv_socket, (LPSOCKADDR)&dest_sin, sizeof(dest_sin)) <  0 ) {
	MessageBox(hWnd, "Адресная ошибка", "Ошибка", MB_OK);
	closesocket(srv_socket);
	return;
 } // if

 MessageBox(hWnd, "Связь установлена", "", MB_OK);

} // ServerStart

//***************************************************************************

#pragma	argsused
void				SendMsg(HWND hWnd)
{
 char	szBuf[ 80 ];
 lstrcpy(szBuf, "Проверка связи");
 send(srv_socket, szBuf, lstrlen(szBuf),  0 );
} // ServerStop

tcp_clnt.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
#define	IDI_APPICON		 101 
#define	IDI_APPICON_SM		 102 
#define	IDR_MENU1			 103 
#define	IDM_START			 4001 
#define	IDM_EXIT			 4002 
#define	IDM_STOP			 4003 
#define	IDM_CONNECT		 4004 
#define	IDM_SEND			 4005 

tcp_clnt.rc
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#include	"tcp_clnt.h"

#define APSTUDIO_READONLY_SYMBOLS
//#include	"afxres.h"
#undef  APSTUDIO_READONLY_SYMBOLS

IDR_MENU1	MENU	DISCARDABLE
BEGIN
	POPUP	"&File"
	BEGIN
		MENUITEM	"&Connect"		IDM_CONNECT
		MENUITEM	"&Send message"     IDM_SEND
		MENUITEM	SEPARATOR
		MENUITEM	"&Exit"			IDM_EXIT
	END
END
...
Рейтинг: 0 / 0
Помогите разобратся с IP адресами
    #34299939
SnowMan2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функция accept имеет следующий прототип:

SOCKET accept (SOCKET sock, struct sockaddr FAR * addr,
int FAR * addrlen);

Через параметр sock необходимо указать дескриптор сокета, который находится в режиме приема для выполнения ожидания.

Параметр addr должен содержать адрес буфера, в который будет записан адрес узла, подключившегося к серверу. Размер этого буфера необходимо указать в переменной типа int, адрес которой передается через параметр addrlen.
...
Рейтинг: 0 / 0
Помогите разобратся с IP адресами
    #34299970
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan) Я очень сильно удивлюсь если тот УЖОС что ты сюда запостил заработает, но отдаю должное твоему трудолюбию


УЖОС работает... Как говорил это мой первый опыт с сокетами, буду перерабатывать :) не возможно с первого раза создать совершенство, не создав пару монстров... Как я говорил выше, не все рождаются гениями...

Gluk (Kazan)Очень советую найти и почитать это, то что Unix можешь не обращать внимания.

Спасибо за информацию, постараюсь прилежно изучить данную книгу :)

SnowMan2 Пример из старых запасов, вроде работает. Сейчас пишу на Builder-e, там несколько иначе и проще.

Спасибо, но к сожалению я не очень хорошо дружу с Visual C, попытаюсь разобратся...

Gluk (Kazan)P.S. И нафига тебе вперлось WSA можешь объяснить ???

Ответ на сее безобразие прост... В примере, по которому я учился работе с сокетами, данное использование объяснялось тем, что приложение требовалось привязать к конкретному окну виндовс, что бы задавать ему статичный порт...

P.S.: спасибо всем, что потратили время на тот бред, что я написал :)
...
Рейтинг: 0 / 0
Помогите разобратся с IP адресами
    #34301098
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LepajОтвет на сее безобразие прост... В примере, по которому я учился работе с сокетами, данное использование объяснялось тем, что приложение требовалось привязать к конкретному окну виндовс, что бы задавать ему статичный порт...


Из WSA тебе понядобятся только Startup и Cleanup :)

На еще попсу покороче чем кнышка
...
Рейтинг: 0 / 0
Помогите разобратся с IP адресами
    #34302224
SnowMan2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторсожалению я не очень хорошо дружу с Visual C
Visual C тут не причем, все компилилось старым Borland-ом 5.01

Gluk (Kazan)Из WSA тебе понядобятся только Startup и Cleanup
Не согласен. ИМХО ассинхронный режим лучше синхронного. Поэтому понадобится WSAAsyncSelect и обработка сообщений. А вот от консольного приложения и функции printf посоветовал бы отказаться, Windows все таки. Также советовал бы на начальном этапе разделить клиент и сервер, так легче разобраться. Затем можно и объединеть.
...
Рейтинг: 0 / 0
Помогите разобратся с IP адресами
    #34302256
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SnowMan2 Gluk (Kazan)Из WSA тебе понядобятся только Startup и Cleanup
Не согласен. ИМХО ассинхронный режим лучше синхронного. Поэтому понадобится WSAAsyncSelect и обработка сообщений. А вот от консольного приложения и функции printf посоветовал бы отказаться, Windows все таки. Также советовал бы на начальном этапе разделить клиент и сервер, так легче разобраться. Затем можно и объединеть.

Posix-ый select в WinSock прекрасно работает. Извращения с оконными сообщениями совсем ни к чему. Что касается консольных приложений - у меня все сервисы такие, так что как раз в printf не вижу никакого криминала. Приложения они ить РАЗНЫЕ бывають (даже под Windows).
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите разобратся с IP адресами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]