Вопрос по С++

Cris

Member
такс вопрос с сокетами -
ну как говорилось раньше есть клиент-сервер, сервер биндит порт и слушает,
а вот с конектом клиента возникают траблы, как направить клиент так чтобы исходяший данные били не из какого попало порта а из указаного - т.е я случайно чтоб посмотреть написал на сервере строчку корорая показивает с какого порта и ИП идут соединения, как оказалось клиент конектиться полностью с различных портов, как поменять его на тот что нужен мне, тоесть я хочю чтобы данные исходили только из 12345 порта и приходили только на 54321 порт, с 54321 все норм но вот с 12345 хз?
 
A

AkeL.php

Guest
А разве при создании сокета ты не указываешь ip/домен и порт?
Не занимался данным вопросом в с++, но на java это дело выглядит так

Код:
public static String server = "127.0.0.1";
public static int port = 9876;
......
socket = new Socket(server, port);
 

Cris

Member
А разве при создании сокета ты не указываешь ip/домен и порт?
Не занимался данным вопросом в с++, но на java это дело выглядит так

Код:
public static String server = "127.0.0.1";
public static int port = 9876;
......
socket = new Socket(server, port);
ну этоже java, в С++ болие мудрено(
 

Cris

Member
ну вот я нашол вроде то что я хочю но падло неработает((

Код:
1  #include <sys/types.h>  
2  #include <sys/socket.h>  
3  #include <netinet/in.h>  
4  #include <netdb.h>  
5  #include <memory.h>   
6  #define SRV_HOST "delta"  
7  #define SRV_PORT 1234  
8  #define CLNT_PORT 1235  
9  #define BUF_SIZE 64 
10  #define TXT_ANSW "I am your client\n"  
11  main () { 
12    int s; 
13    int from_len; 
14    char buf[BUF_SIZE]; 
15    struct hostent *hp; 
16    struct sockaddr_in clnt_sin, srv_sin;  
17    s = socket (AF_INET, SOCK_STREAM, 0); 
18    memset ((char *)&clnt_sin, '\0', 
                       sizeof(clnt_sin)); 
19    clnt_sin.sin_family = AF_INET; 
20    clnt_sin.sin_addr.s_addr = INADDR_ANY; 
21    clnt_sin.sin_port = CLNT_PORT; 
22    bind (s, (struct sockaddr *)&clnt_sin, 
                   sizeof(clnt_sin));  
23    memset ((char *)&srv_sin, '\0', 
                sizeof(srv_sin)); 
24    hp = gethostbyname (SRV_HOST); 
25    srv_sin.sin_family = AF_INET; 
26    memcpy ((char 
*)&srv_sin.sin_addr,hp->h_addr,hp->h_length); 
27    srv_sin.sin_port = SRV_PORT; 
28    connect (s, &srv_sin, sizeof(srv_sin)); 
29    from_len = recv (s, buf, BUF_SIZE, 0); 
30    write (1, buf, from_len); 
31    send (s, TXT_ANSW, sizeof(TXT_ANSW), 0); 
32    close (s); 
33    exit (0);
34    }
ну вообщем мне нужнона клиенте забиндить порт - bind,
но когда я его юзаю потом почемуто клиент неможет приконектиться к серверу(
 
Останнє редагування:

dreamer

Member
ну вообщем мне нужнона клиенте забиндить порт - bind,
но когда я его юзаю потом почемуто клиент неможет приконектиться к серверу(
А можно узнать – нафига козе баян? Порты нужны, чтоб привязать сокет к уникальному имени, по которому на него смогут ссылаться другие. Для сервера это оправдано – на него ссылаются. А клиент сам ссылается – зачем ему порт? Тем более, что указывая конкретный порт ты разрешаешь только один сокет с твоей машины – остальные не смогут занять уже занятый порт.
Твой код должен работать по-идее, проверь чтоб порт не был занят.
 

Cris

Member
А можно узнать – нафига козе баян? Порты нужны, чтоб привязать сокет к уникальному имени, по которому на него смогут ссылаться другие. Для сервера это оправдано – на него ссылаются. А клиент сам ссылается – зачем ему порт? Тем более, что указывая конкретный порт ты разрешаешь только один сокет с твоей машины – остальные не смогут занять уже занятый порт.
Твой код должен работать по-идее, проверь чтоб порт не был занят.
хм... а как тогда браузеры работает только через 80(по умолчанию) порт, игры на определенный + в несколько окон + фаерволом закрыты все остальные?
 

dreamer

Member
хм... а как тогда браузеры работает только через 80(по умолчанию) порт, игры на определенный + в несколько окон + фаерволом закрыты все остальные?
Файрволы обычно закрывают порты серверов, а не клиентов. На исходящие соединения – для браузеров, игр и т.д. и на входящие соединения для локальных серверов – торренты, апач и проч.
 

Cris

Member
хм....) походу так и есть))
кста нехто не может поповетовать какойнить хороший сниффер пакетов? хочю зделать клиент для браузерной игрушки)) я протокол HTTP хотьи читал но надо увидить его на практике))
скачал один - CommView, вроде как все показивает, но одна проблема - нету фильтра, он показивает все и сразу и уследить за чем либо сложно а по логам лазить неудобно(
 

dreamer

Member
кста нехто не может поповетовать какойнить хороший сниффер пакетов? хочю зделать клиент для браузерной игрушки)) я протокол HTTP хотьи читал но надо увидить его на практике))
скачал один - CommView, вроде как все показивает, но одна проблема - нету фильтра, он показивает все и сразу и уследить за чем либо сложно а по логам лазить неудобно(
Поставь на ФФ файрбаг, не сниффер, но при загрузке ресурсов показывает структуру запросов и ответов.
 
Зверху