Модераторы: feodorv

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> клиент сервер TCP на С 
:(
    Опции темы
kill12
Дата 10.6.2009, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.6.2009

Репутация: нет
Всего: нет



Всем привет! Нужно написать 2 простенькие программы на С, осуществляющие передачу сообщения между собой (эмуляция клиент - сервер) по средствам протокола TCP. Может у кого что есть? Всем огромное спасибо!
PM MAIL   Вверх
Alca
Дата 10.6.2009, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 1
Всего: 50



http://forum.vingrad.ru/forum/topic-262285.html

Добавлено через 52 секунды
http://forum.xakep.ru/m_1260960/tm.htm
http://www.softtime.ru/cpp/read.php?id_for...mp;id_theme=793

Добавлено через 2 минуты и 45 секунд
http://netcode.ru/cpp/?lang=&katID=19&...&artID=5045

Добавлено через 2 минуты и 57 секунд
http://www.hackzona.ru/hz.php?name=News&am...le&sid=9281

Добавлено через 4 минуты и 27 секунд
http://www.sources.ru/cpp/cpp_remote_admin_src.shtml


--------------------
PM WWW ICQ Skype Jabber   Вверх
andrew_121
Дата 10.6.2009, 23:43 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Цитата(kill12 @  10.6.2009,  21:00 Найти цитируемый пост)
Нужно написать 2 простенькие программы на С

Пиши. Я не против.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Vampir41k
Дата 11.6.2009, 11:56 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 15.3.2009

Репутация: нет
Всего: нет



сервер
Код

#include <ctype.h>
#include <winsock.h>
#include <stdio.h>

#define SIZE sizeof(struct sockaddr_in)

DWORD WINAPI child(void *param);

main ()
{
  int sockfd;
  int rc;
  struct sockaddr_in server = {AF_INET, 7000, INADDR_ANY}, client;
  WSADATA WSAData;
  int newsockfd, size;

  DWORD child_id;

  rc = WSAStartup (MAKEWORD(1, 1), &WSAData);
  if(rc != 0){
    perror("WSAStartup  Error");
    return 1;
  }
/* Создает сокет */
  if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) == -1){
    perror ("socket call error");
    exit (1);
  }

  /* Связает адрес с сокетом */
  if (bind (sockfd, (struct sockaddr *) &server, SIZE) == -1){
    perror ("bind call error");
    exit (1);
  }

  /* Включает прием соединений */
  if (listen (sockfd, 5) == -1){
    perror ("listen call error");
    exit (1);
  }

  for (;;){
    /* Принимает запрос на соединение */
    if ((newsockfd = accept (sockfd, (struct sockaddr *) &client, &size)) == -1){
       perror ("accept call error");
       continue;
    }

    printf("Request from %s, processing\n", inet_ntoa(client.sin_addr));
    /* Создает дочерний процесс для работы с соединением */
    CreateThread(NULL,0,child,&newsockfd,0,&child_id);
  }
  //WSACleanup();
}
DWORD WINAPI child(void *param){
  char c;
  int newsockfd;

  printf("Run child\n");
  newsockfd=*(int *)param;
  while (recv (newsockfd, &c, 1, 0) > 0){
     c = toupper (c);
     send (newsockfd, &c, 1, 0);
  }
  /* После того, как клиент прекратит передачу данных,
   * сокет может быть закрыт и дочерний процесс
   * завершает работу */
  closesocket (newsockfd);
  printf("child exited\n");
  ExitThread(0);
  return 0;
}



клиент
Код

#include <ctype.h>
#include <stdio.h>
#include <winsock.h>

#define SIZE sizeof(struct sockaddr_in)

main ()
{
  int sockfd;
  int c, rc;
  struct sockaddr_in server = {AF_INET, 7000};
  WSADATA WSAData;

 rc = WSAStartup (MAKEWORD(1, 1), &WSAData);
  if(rc != 0)
  {
    perror("WSAStartup  Error");
    return 1;
  }

  /* Преобразовывает и сохраняет IP адрес сервера */
  server.sin_addr.s_addr = inet_addr ("127.0.0.1");

  /* Создает сокет */
  if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) == -1)
  {
    perror ("socket call error");
    exit (1);
  }

  /* Соединяет сокет с сервером */
  if (connect (sockfd, (struct sockaddr *) &server, SIZE) == -1)
  {
    perror ("connect call error");
    exit (1);
  }
  /* Цикл обмена данными с сервером */
  for (rc = '\n';;)
  {
    if (rc == '\n')
      printf ("Input characters\n");
    c = getchar ();
    if (c==-1)
      break;
    send (sockfd, (char*)&c, 1, 0);
    if (recv (sockfd, (char*)&rc, 1, 0) > 0)
      printf ("%c", rc);
    else
    {
      printf ("Server is not response\n");
      break;
    }
  }
  closesocket (sockfd);
  WSACleanup();
  return 1;
}

PM MAIL WWW ICQ   Вверх
andrew_121
Дата 11.6.2009, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Цитата(Vampir41k @  11.6.2009,  11:56 Найти цитируемый пост)
#define SIZE sizeof(struct sockaddr_in)

Как-то не очень правильно...
Назови ее уже понятнее. К примеру:
Код

#define SIZEOF_SOCKADDRESS sizeof(struct sockaddr_in)

Но тогда пропадает смысл в дефайне.
В общем, дело вкуса.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
bourne
Дата 17.7.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 12.7.2009

Репутация: нет
Всего: нет



Доброго времени суток, господа!
Как из функции child получить доступ к Builder-овской форме? Как, например, вывести в Memo принятое сообщение?
PM MAIL   Вверх
SVN74
Дата 17.7.2009, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 1
Всего: 18



Цитата(bourne @  17.7.2009,  21:15 Найти цитируемый пост)
Как из функции child получить доступ к Builder-овской форме? Как, например, вывести в Memo принятое сообщение? 

Надежней всего SendMessage или PostMessage взависимости от нужды
PM MAIL WWW   Вверх
Andrew121
Дата 18.7.2009, 03:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 21.6.2009

Репутация: нет
Всего: 1



Цитата(Vampir41k @  11.6.2009,  11:56 Найти цитируемый пост)
  ExitThread(0);

Это здесь лишнее.
PM MAIL   Вверх
bourne
  Дата 18.7.2009, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 12.7.2009

Репутация: нет
Всего: нет



Цитата(SVN74 @  17.7.2009,  21:29 Найти цитируемый пост)
Надежней всего SendMessage или PostMessage взависимости от нужды 

SendMessage(Form1->Memo1->Handle, WM_SETTEXT, 0, "Done!");
?
PM MAIL   Вверх
andrew_121
Дата 19.7.2009, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



bourne, Да.
А что не так?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
bourne
Дата 19.7.2009, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 12.7.2009

Репутация: нет
Всего: нет



Цитата(andrew_121 @  19.7.2009,  07:01 Найти цитируемый пост)
А что не так? 

Я передавал форме ЮникодСтринг, а нужен был лонг smile
Сейчас вроде все работает. Спасибо
PM MAIL   Вверх
andrew_121
Дата 19.7.2009, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Цитата(bourne @  19.7.2009,  09:54 Найти цитируемый пост)
Я передавал форме ЮникодСтринг, а нужен был лонг

А что такое "лонг" ?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
bourne
Дата 19.7.2009, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 12.7.2009

Репутация: нет
Всего: нет



Цитата(andrew_121 @  19.7.2009,  10:53 Найти цитируемый пост)
А что такое "лонг" ? 

лонг == long smile
P.S. кстати, может кто знает как выглядит обработчик для Send/PostMessage? smile
PM MAIL   Вверх
bourne
Дата 10.8.2009, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 12.7.2009

Репутация: нет
Всего: нет



 smile  smile  smile 
Пытаюсь вести лог всех подключившихся клиентов. Запись вида "IP:port". Вот Ип норм записывается, а вот порт какой-то страшный. Куски кода:
Код

typedef struct tcp_header
{
    unsigned short src_port;
    unsigned short dst_port;
/*....*/
}
    tcp = (tcp_header *)(data + 14 + (ip->len) * 4);
    dport = ntohs(tcp->dst_port);
/* ... */

В dst_port вместо, к примеру, числа 80 я вижу 29808, а в dport заносится другое число, но не 80 :( Иногда вобще 0 выдает.
Уж и не знаю куда смотреть.
smile 

Это сообщение отредактировал(а) bourne - 10.8.2009, 20:16
PM MAIL   Вверх
jonie
Дата 10.8.2009, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



Цитата
Код

typedef struct tcp_header
{
    unsigned short src_port;
    unsigned short dst_port;
/*....*/
}
    tcp = (tcp_header *)(data + 14 + (ip->len) * 4);
    dport = ntohs(tcph->dst_port);
/* ... */


а tcph это че за байда? где ты ее инициализируешь? и вообще у тебя зачем своя tcp_header, если 99% в стандартных хедерах уже все есть и с нормальной упаковкой (pragma pack(1)) ?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
bourne
Дата 10.8.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 12.7.2009

Репутация: нет
Всего: нет



Цитата(jonie @  10.8.2009,  19:57 Найти цитируемый пост)
а tcph это че за байда? 

Очепятка  smile  Там не tcph, а tcp

Цитата(jonie @  10.8.2009,  19:57 Найти цитируемый пост)
и вообще у тебя зачем своя tcp_header, если 99% в стандартных хедерах уже все есть

Я начал искать описание в станд.хедерах, решил не тратить время и написать "свое" smile

Это сообщение отредактировал(а) bourne - 10.8.2009, 20:17
PM MAIL   Вверх
jonie
Дата 10.8.2009, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



Цитата
Я начал искать описание в станд.хедерах, решил не тратить время и написать "свое" 

поздравляю! Вы изобрели велосипед с квадратными колесами.
как минимум вы не указали упаковку 
#pragma pack(push)
#pragma pack(1) 
struct...
#pragma pack(pop)

перед объявлением структуры......


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
bourne
Дата 10.8.2009, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 12.7.2009

Репутация: нет
Всего: нет



Добавил... Вылетает в начале работы с ошибкой:
Цитата

Project Project1.exe raised exception class EOSError with message 'System Error. Code:5. Отказано в доступе'


Это сообщение отредактировал(а) bourne - 10.8.2009, 20:38
PM MAIL   Вверх
bourne
Дата 11.8.2009, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 12.7.2009

Репутация: нет
Всего: нет



Ошибка найдена.

jonie, спасибо за:
Цитата

как минимум вы не указали упаковку 

теперь хотя бы знаю что это и для чего нужно smile
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1393 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.