The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Клиент-сервер. Получение порт:адрес клиента"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Клиент-сервер. Получение порт:адрес клиента"  +/
Сообщение от fx4gH (ok) on 03-Авг-09, 16:54 
Код тестируется на виртуалке. Выдаёт IP клиента которого вообще нет.
Правильно ли я получаю IP и порт клиента? Подключался и из физической сети, и с другой консоли на этой же виртуалке FreeBSD.

Код сервера:


#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>

int main( void )
{
struct sockaddr_in local, ext;
int s;
int s1;
int rc;
int extlen;
char buf[1];

local.sin_family = AF_INET;
local.sin_port = htons( 9000 );
local.sin_addr.s_addr = htonl( INADDR_ANY );

s = socket( AF_INET, SOCK_STREAM, 0 );
if ( s < 0 )
{
  perror( "ошибка вызова socket" );
  exit( 1 );
}

rc = bind( s, (struct sockaddr *)&local, sizeof( local ) );
if ( rc < 0 )
{    
  perror( "ошибка вызова bind" );
  exit( 1 );
}

rc = listen( s, 5 );
if ( rc )
{
  perror( "ошибка вызова listen" );
  exit( 1 );
}

// s1 = accept( s, NULL, NULL );
s1 = accept(s,(struct sockaddr *)&ext, &extlen);
if ( s1 < 0 )
{
  perror( "ошибка вызова accept" );
  exit( 1 );
}
    
printf("Порт источника %d\n",htons((struct sockaddr_in *)&ext.sin_port));
printf("Адрес источника %s\n",inet_ntoa((struct sockaddr_in *)&ext.sin_addr));

rc = recv( s1, buf, 1, 0 );
if ( rc <= 0 )
{
  perror( "ошибка вызова recv" );
  exit( 1 );
}

printf( "%c\n", buf[0] );

rc = send( s1, "2", 1, 0 );
if ( rc <= 0 )perror( "ошибка вызова send" );

exit( 0 );
}


Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Клиент-сервер. Получение порт:адрес клиента"  +/
Сообщение от fx4gH (ok) on 03-Авг-09, 19:49 
Решение

extlen = sizeof(ext);

printf("Порт источника %d\n",htons(&ext.sin_port));
printf("Адрес источника %s\n",inet_ntoa(&ext.sin_addr));


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру