Нажмите CTRL-D чтобы добавить нас в закладки
HackZone.RU - Socket на чистом С Актуальные базы 2GIS в форматах CSV,Excel,SQL
Войти / Регистрация / Участники
Определение даты выпуска iPhone по серийному номеру
-
Поиск по сайту
Форумы



Реклама

Программирование / C/C++/VC++ RSS подписка на сообщения с форума Subscribe Модераторы: RenGO, Leo08, codemaster, B3JIoMep, BRUNOTTI, Virous


Новая тема Наиболее обсуждаемые темы Наиболее посещаемые темы
Поиск 
Период
Перейти

Просмотров - 3518
Socket на чистом С
Добавить этот топик в закладки »
RSS-лента ответов »Subscribe
M.W.N.N.


Gold Member
# | Сообщение добавлено 07.03.2010 21:52:20
Отредактировано 08.03.2010 20:28:55 by M.W.N.N.
Здравствуйте..
Такая проблема:
Вот пример клиента и сервера на чистом си tcp
Сервер:
Text

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
 
int main(void)
{
  #define sHELLO "123"
  struct sockaddr_in stSockAddr;
  int i32SocketFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
 
  if(-1 == i32SocketFD)
  {
    perror("Ne mogy sozdat socket");
    exit(EXIT_FAILURE);
  }
 
  memset(&stSockAddr, 0, sizeof(stSockAddr));
 
  stSockAddr.sin_family = PF_INET;
  stSockAddr.sin_port = htons(1111);
  stSockAddr.sin_addr.s_addr = INADDR_ANY;
 
  if(-1 == bind(i32SocketFD,(const void *)&stSockAddr, sizeof(stSockAddr)))
  {
    perror("Oshibka svazivaniya");
    close(i32SocketFD);
    exit(EXIT_FAILURE);
  }
 
  if(-1 == listen(i32SocketFD, 10))
  {
    perror("Oshibka proslushivaniya");
    close(i32SocketFD);
    exit(EXIT_FAILURE);
  }
 
  for(;;)
  {
    int i32ConnectFD = accept(i32SocketFD, NULL, NULL);
 
    if(0 > i32ConnectFD)
    {
      perror("Oshibka prinatya");
      close(i32ConnectFD);
      close(i32SocketFD);
      exit(EXIT_FAILURE);
    }
 
    // отправляем клиенту приветствие
    send(i32SocketFD, sHELLO, sizeof(sHELLO), 0);
 
   /* выполнение операций чтения и записи ... */
    close(i32ConnectFD);
  }
  return 0;
}
 

Клиент
Text

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
 
int main(void)
{
  char sHELLO[20];
  struct sockaddr_in stSockAddr;
  int i32Res;
  int i32SocketFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  if(-1 == i32SocketFD)
  {
    perror("Oshibka ne mogy sozdat soket");
    exit(EXIT_FAILURE);
  }
 
  memset(&stSockAddr, 0, sizeof(stSockAddr));
 
  stSockAddr.sin_family = PF_INET;
  stSockAddr.sin_port = htons(1111);
  i32Res = inet_pton(PF_INET, "127.0.0.1", &stSockAddr.sin_addr);
 
  if(0 > i32Res)
  {
    perror("Pervii parametr ne otnositsa k kotegorii nor adresov");
    close(i32SocketFD);
    exit(EXIT_FAILURE);
  }
  else if(0 == i32Res)
  {
    perror("char string (Ne sodergit norm 2 ip");
    close(i32SocketFD);
    exit(EXIT_FAILURE);
  }
 
  if(connect(i32SocketFD, (const void *)&stSockAddr, sizeof(stSockAddr))==-1)
  {
    perror("oshibka soedineniya");
    close(i32SocketFD);
    exit(EXIT_FAILURE);
  }
 
 
  /* выполнение операций чтения и записи ... */
 
  close(i32SocketFD);
  printf("\n%s\n",sHELLO);
  printf("\n");
  return 0;
}
 

Проблемы две:
1)через переменную sHELLO отправляется строка "123" клиенту, но после отправки клиенту приходят вместо 123 - кракозябры.
2)При повторной попытке запустить пишет: Address already in use
В чем могут быть проблемы?
 
Если кому не сложно и есть время приведите пример самого простого клиент серверного приложения на чистом си с udp
 
Листинг из вики по udp не полон сервер
Листинги из статьи Криса Касперски не компилятся(компилил под виндой на dev c++ ибо нету и не будет визуал студии)
 
javascript:/*--&gt;&lt;/marquee&gt;&lt;/script&gt;&lt;/title&gt;&lt;/textarea&gt;&lt;/noscript&gt;&lt;/style&gt;&lt;/xmp&gt;&quot;&gt;
Сказать спасибо Ответить Цитировать

BRe@K




Prime
# | Сообщение добавлено 08.03.2010 21:17:41
Держи http://www.gamedev.net/community/forums/topic.asp?topic_id=460430
Небольшое уточнение (не сочти за научение), то что у тебя sHELLO это не переменная а константа. Чего у тебя кракозябры подсказать даже приблизительно не могу, так как в упор не вижу кода приема (лишь место под него). Address already in use кто орет невкурил (таковой строки нету ни у первого ни у второго), но стало быть догадываюсь что сервер, раз дважды слушать одновремменно один порт проблематично вот он и орет.
 
Опять же подробности и разъяснения в студию, тогда может кто из более понимающих от нашей комьюнити подскажет, или же я исходя из своего скромного опыта.
Сказать спасибо Ответить Цитировать

M.W.N.N.


Gold Member
# | Сообщение добавлено 14.03.2010 10:40:43
Подскажите пож-та как через функцию sendto() отправить значение переменной типа int?
При отправке орет на то что бы переменная должна быть строчной. Подумывал над тем что обрабатывать все действия на стороне отправителя, преобразовывать в строчную переменную, отправлять, а после на стороне получателя преобразовывать в численный тип, но показалось что это извращенство Biggrin
 
Добавлено через: 1 час 37 минут 21 секунда
 
Вот допустим даже так:
Text

    while(1)
    {
        bytes_read = recvfrom(sock, buf, 1024, 0, NULL, NULL);
        buf[bytes_read];
        puts(buf);
        int test=atoi(buf);
        printf("%d",test);
    }
 

Первый раз он переменную выводит как строчную - puts(buf); Все выводит нормально
Потом преобразование в целочисленную переменную int test=atoi(buf); и printf("%d",test);
но ничего не выводит.
 
javascript:/*--&gt;&lt;/marquee&gt;&lt;/script&gt;&lt;/title&gt;&lt;/textarea&gt;&lt;/noscript&gt;&lt;/style&gt;&lt;/xmp&gt;&quot;&gt;
Сказать спасибо Ответить Цитировать

BRe@K




Prime
# | Сообщение добавлено 14.03.2010 20:12:49
1) buf[bytes_read]; - Таким образом нельзя пытаться выделять память, если только bytes_read не константа (здесь нельзя). Функция recvfrom будет возвращать не более 1024 байта, таким образом целесообразно сделать буфер и размера 1024 байта buf[1024].
2) Раз тебя не беспокоят последние два параметра то целесообразнее пользоваться recv вместо recvfrom (параметры те же, но без последних двух).
3) Может это тебе и в кайф делать для проги терминейт каждый раз, но таким джедайским методом лучше не ползоваться и проверять как раз в той же переменной bytes_read не возвратила ли функция recv или более любимая тобой recvfrom -1 и линять с цикла через break (не путать с BRe@K, хотя мы в некотором роде родственники :) ) т.к. нет чести в бесконечном брожении. Необходимо так же считать количество принятых данных и выходить сразу же если все о чем договаривались клиент с сервером услышано.
И в догонку пока ты не пошел переписывать не забудь взглянуть: http://beej.us/guide/bgnet/output/html/multipage/recvman.html
может найдешь для себя чего-нибудь интересненького.
Сказать спасибо Ответить Цитировать


Только зарегистрированные пользователи могут оставлять сообщения в форуме

Зарегистрироваться *** Авторизоваться

 Последние новости и статьи  Последние сообщения с форумов
  • Самозащита от вируса Petya
  • Google Pixel взломали за 60 секунд
  • В CMS Joomla обнаружена критическая 0-day уязвимость
  • ФБР не смогло взломать протокол шифрования переписки террористов ...
  • Полиция обыскала дом предполагаемого создателя платежной системы ...
  • Google: квантовый ПК будет в 100 млн раз быстрее стандартных чипо...
  • "Лаборатория Касперского" констатирует усиление атак кибергруппир...
  • Microsoft Edge откроет исходные коды ChakraCore
  • Anonymous объявили 11 декабря «днём троллинга» ИГИЛ
  • Миллионы телевизоров, смартфонов и маршрутизаторов оказались уязв...

    Все новости... Все статьи... Прислать новость RSS
  • Взлом и безопасность / Новичкам » Re: Взлом Whatsapp.Viber.Instagram. facebook.Узнаем взломаем...
  • Взлом и безопасность / Новичкам » Re: Профессиональные услуги по взлому
  • Взлом и безопасность / Новичкам » Re: Online.help.free.hack@gmail.com - услуги взлома и ddos а...
  • Взлом и безопасность / Новичкам » Профессиональные услуги по взлому
  • Взлом и безопасность / Новичкам » Взлом Whatsapp.Viber.Instagram. facebook.Узнаем взломаем !!!
  • Программирование / Java » стрелочные функции в javascript
  • Разное / Ищу работу » Re: Качественный подбор паролей к почтам. Работаем с 2011 го...
  • Разное / Ищу работу » Re: взлом почты на майле
  • Разное / Ищу работу » Re: Взлом емейлов, вконтакте, одноклассники
  • Разное / Ищу работу » Re: Взлом почты mail.ru, yandex.ru, rambler, gmail

    Все форумы... RSS


  • Разместить рекламу
    © HackZone Ltd. 2007-2012. Все права зарегистрированы.
    Перепечатка материалов без согласования и указания источника будет преследоваться по Закону

    О проекте | История проекта | Размещение рекламы | Обратная связь | Правила поведения на портале
    Ya-Cyt службы мониторинга серверов

    #{title}

    #{text}

    x

    #{title}

    #{text}