Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | | |
ОК. 05.06.01 21:31 Число просмотров: 731
Автор: Delimiter Статус: Незарегистрированный пользователь
|
> будете проходить мимо, проходите себе дальше :-))) > > ОК, и тебе спасибо, если буду, дам знать )) > > удачи
теперь все Ок
нашел логическую ошибку :))
bind -нуно делать только один раз хотя и так новому отказывают а первый остается.... ичо раз пасиба
сейчас у меня обе стороны сервера при выключение и последующем включении одной или обеих сторон связь автовостанавливается ...
|
<programming>
|
[C++] connect на ровном месте возвращает 1, кто знает описание ЕЙ 05.06.01 16:39
Автор: Delimiter Статус: Незарегистрированный пользователь
|
client1 = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
memset ((char *)&clnt_sin, '\0',sizeof(clnt_sin));
clnt_sin.sin_family = AF_INET;
clnt_sin.sin_addr.s_addr = INADDR_ANY;
clnt_sin.sin_port = 4444;
int m=bind (client1, (struct sockaddr *)&clnt_sin,sizeof(clnt_sin));
if(m!=0)
{
m_str1+=CString("Result Bind:");
m_str1+=CString(itoa(m,mybuf2,10));
m_str1+=CString("\r\n");
}
memset ((char *)&srv_sin, '\0',sizeof(srv_sin));
srv_sin.sin_family = AF_INET;
memcpy ((char*)&srv_sin.sin_addr,(char *)&ClAddr.sin_addr,4);
srv_sin.sin_port = 2222;
m=connect (client1,(struct sockaddr *) &srv_sin, sizeof(srv_sin));
if(m!=0)
{
m_str1+=CString("Result Connect:");
m_str1+=CString(itoa(m,mybuf2,10));
m_str1+=CString("\r\n");
}
|
|
[C++] connect на ровном месте возвращает 1, кто знает описание ЕЙ 05.06.01 17:19
Автор: kabanchik Статус: Незарегистрированный пользователь
|
не совсем ровное вообще то. проследи за " ^^^^^^ "
> client1 = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); > memset ((char *)&clnt_sin, '\0',sizeof(clnt_sin)); > clnt_sin.sin_family = AF_INET; > clnt_sin.sin_addr.s_addr = INADDR_ANY; > clnt_sin.sin_port = 4444; ^^^^^^^^^^ clnt_sin.sin_port = htos(4444);
> int m=bind (client1, (struct sockaddr > *)&clnt_sin,sizeof(clnt_sin)); > if(m!=0) > { > m_str1+=CString("Result Bind:"); > m_str1+=CString(itoa(m,mybuf2,10)); > m_str1+=CString("\r\n"); > } > memset ((char *)&srv_sin, '\0',sizeof(srv_sin)); > srv_sin.sin_family = AF_INET; > memcpy ((char*)&srv_sin.sin_addr,(char > *)&ClAddr.sin_addr,4); ^^^^^^^^^ что за ClAddr.sin_addr? адрес у него правильный ? не забудь про htol(u_long addr);
> srv_sin.sin_port = 2222; ^^^^^^^^^ srv_sin.sin_port = htos(2222);
> m=connect (client1,(struct sockaddr *) &srv_sin, > sizeof(srv_sin)); > if(m!=0) > { > m_str1+=CString("Result Connect:"); > m_str1+=CString(itoa(m,mybuf2,10)); > m_str1+=CString("\r\n"); > }
и еще, если Win32, то вызови при ошибке WSAGetLastError(); посмотри что за код возвращает, думаю так тебе понятней буде найти на каком месте спотыкается
и еще, можно сделать некоторые изменения
> clnt_sin.sin_family = AF_INET; > clnt_sin.sin_addr.s_addr = INADDR_ANY; ^^^^^ тут намого целесообразнее указать локальный адрес
> clnt_sin.sin_port = 4444; ^^^^^^ а тут вообще можно clnt_sin.sin_port = 0; - это же клиентская часть, для него монопенисно к какому порту баундиться.
|
| |
[C++] connect на ровном месте возвращает 1, кто знает описание ЕЙ 05.06.01 17:42
Автор: Delimiter Статус: Незарегистрированный пользователь
|
> не совсем ровное вообще то. проследи за " ^^^^^^ " > > > client1 = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); > > memset ((char *)&clnt_sin, '\0',sizeof(clnt_sin)); > > clnt_sin.sin_family = AF_INET; > > clnt_sin.sin_addr.s_addr = INADDR_ANY; > > clnt_sin.sin_port = 4444; > ^^^^^^^^^^ clnt_sin.sin_port = htos(4444); > > int m=bind (client1, (struct sockaddr > > *)&clnt_sin,sizeof(clnt_sin)); > > if(m!=0) > > { > > m_str1+=CString("Result Bind:"); > > m_str1+=CString(itoa(m,mybuf2,10)); > > m_str1+=CString("\r\n"); > > } > > memset ((char *)&srv_sin, '\0',sizeof(srv_sin)); > > srv_sin.sin_family = AF_INET; > > memcpy ((char*)&srv_sin.sin_addr,(char > > *)&ClAddr.sin_addr,4); > ^^^^^^^^^ что за ClAddr.sin_addr? адрес у него правильный ? > не забудь про htol(u_long addr); > > srv_sin.sin_port = 2222; > ^^^^^^^^^ srv_sin.sin_port = htos(2222); > > m=connect (client1,(struct sockaddr *) &srv_sin, > > sizeof(srv_sin)); > > if(m!=0) > > { > > m_str1+=CString("Result Connect:"); > > m_str1+=CString(itoa(m,mybuf2,10)); > > m_str1+=CString("\r\n"); > > } > > и еще, если Win32, то вызови при ошибке WSAGetLastError(); > посмотри что за код возвращает, думаю так тебе понятней > буде найти на каком месте спотыкается > > и еще, можно сделать некоторые изменения > > clnt_sin.sin_family = AF_INET; > > clnt_sin.sin_addr.s_addr = INADDR_ANY; > ^^^^^ тут намого целесообразнее указать локальный адрес > > clnt_sin.sin_port = 4444; > ^^^^^^ а тут вообще можно clnt_sin.sin_port = 0; - это же > клиентская часть, для него монопенисно к какому порту > баундиться.
ооооо позор на мою тупую башку я по несуществующему htos
раз сто глазами проходил....
а тебя kabanchik .... я бы пивом напоил.....
если будешь собиратся на кипр мыльни встречу в Никосии и напьемся :))
Smal1964@yahoo.com
я в С++ временами программю а 12 часов в день в VOS6 & VOS7 Parity
....а.... int WSAGetLastError (void); :)
а во вторых это сервер :)) и этот код внутри обработчика FD_ACCEPT :)
ПАСИБА
|
| | |
ОК. 05.06.01 17:51
Автор: kabanchik Статус: Незарегистрированный пользователь
|
будете проходить мимо, проходите себе дальше :-)))
ОК, и тебе спасибо, если буду, дам знать ))
удачи
|
| | | |
ОК. 05.06.01 21:31
Автор: Delimiter Статус: Незарегистрированный пользователь
|
> будете проходить мимо, проходите себе дальше :-))) > > ОК, и тебе спасибо, если буду, дам знать )) > > удачи
теперь все Ок
нашел логическую ошибку :))
bind -нуно делать только один раз хотя и так новому отказывают а первый остается.... ичо раз пасиба
сейчас у меня обе стороны сервера при выключение и последующем включении одной или обеих сторон связь автовостанавливается ...
|
| | | | |
ОК. 05.06.01 22:03
Автор: kabanchik Статус: Незарегистрированный пользователь
|
> bind -нуно делать только один раз хотя и так новому > отказывают а первый остается.... ичо раз пасиба
тебе видней, но можно bind-ить несколько раз. для этого надо:
SOCKET s;
.............
BOOL bReuse = TRUE;
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (const char*)&bReuse, sizeof(BOOL));
bind(...);
подробнее об этом почитай в MSDN-e
|
|
|