powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / помогите , не могу разобратсяс сокетами.
8 сообщений из 8, страница 1 из 1
помогите , не могу разобратсяс сокетами.
    #34736753
-zaraza-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
создается 2 сокета sock1, sock2 , биндятся

задача следующая организовать двухстороннюю передачу данных (этакий портмапинг)

пишу функцию

Код: 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.
void portmap (int sp, int cp) {	   
    int l;
    char buff[ 512 ];
    fd_set r;

    while ( 1 )
    {	
	FD_SET (cp, &r);		
        FD_SET (sp, &r);
	
        select(sp+ 1 , &r, NULL, NULL, NULL); 
	if (FD_ISSET(cp, &r))
	{

	    l = read(cp, buff, sizeof(buff));   
	    write(sp, buff, l);			 
	}
	if (FD_ISSET(sp, &r))
	{
           l = read(sp, buff, sizeof(buff));    
	    write(cp, buff, l);                 
	}
    }
}


вызов функции соответственно
Код: plaintext
portmap(sock1,sock2)

результат данные идут в одну сторону из sock2 в sock1 в обратную никак
подозреваю что что то не так с select (убираю инструкцию - работает но криво , после заполнения буфера приходится посылать символ возврата каретки)

подскажите как поправить.
...
Рейтинг: 0 / 0
помогите , не могу разобратсяс сокетами.
    #34737038
-zaraza-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл добавить , работает все это под linux.
...
Рейтинг: 0 / 0
помогите , не могу разобратсяс сокетами.
    #34737060
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может стоит добавить
Код: plaintext
FD_ZERO(&r);
перед FD_SET
?
...
Рейтинг: 0 / 0
помогите , не могу разобратсяс сокетами.
    #34737105
-zaraza-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробывал , хотя не надеялся увидеть результат.
данные из sock2 в sock1 передаются , обратно нет.
...
Рейтинг: 0 / 0
помогите , не могу разобратсяс сокетами.
    #34737124
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-zaraza-попробывал , хотя не надеялся увидеть результат.
данные из sock2 в sock1 передаются , обратно нет.

я почему-то думал, что FD_ZERO нужно писать обязательно, почему в
select(sp+1, &r, NULL, NULL, NULL);

в винде этот параметр игнорируется, а в никсах кажется там должно быть кол-во проверяемых сокетов, в данном случае 2
...
Рейтинг: 0 / 0
помогите , не могу разобратсяс сокетами.
    #34737125
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы попробовал подебажить этот код
...
Рейтинг: 0 / 0
помогите , не могу разобратсяс сокетами.
    #34737151
-zaraza-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо всем кто откликнулся

проблему решил

Код: plaintext
select(sp+cp+ 1 , &r, NULL, NULL, NULL);

суть : дескриптор cp привышал значение sp+1 поэтому не слушался функцией select

Tubrik - сенкс , ты натолкнул на верную мысль )

только в select указываетися не колличество сокетов для прослушивания ,а верхний предел значения дескрипторов которые будут прослушиватся.
...
Рейтинг: 0 / 0
помогите , не могу разобратсяс сокетами.
    #34737552
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-zaraza-спасибо всем кто откликнулся

проблему решил

Код: plaintext
select(sp+cp+ 1 , &r, NULL, NULL, NULL);

суть : дескриптор cp привышал значение sp+1 поэтому не слушался функцией select

Tubrik - сенкс , ты натолкнул на верную мысль )

только в select указываетися не колличество сокетов для прослушивания ,а верхний предел значения дескрипторов которые будут прослушиватся.

Верхний +1, тое max +1.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / помогите , не могу разобратсяс сокетами.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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