реклама на сайте
подробности

 
 
> Прием данных через интернет UDP сокет., как узнавать длину входящего пакета данных, IP и PORT источника
Oops
сообщение Sep 8 2010, 12:02
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 129
Регистрация: 28-08-08
Из: г.Омск
Пользователь №: 39 870



Здравствуйте!!!

Разбираюсь с интернет сокетами в Linux.
Пишу программку UDP сервер. Открывать UDP сокет и принимать данные научился.
Вот только не знаю как узнавать длину входящего пакета данных, IP и PORT источника (того кто отправил этот пакет).
Подскажите как это делается?

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
s.i.suprun
сообщение Sep 11 2010, 13:32
Сообщение #2


Участник
*

Группа: Validating
Сообщений: 71
Регистрация: 24-06-08
Из: Харьков
Пользователь №: 38 521



Надеюсь статья поможет http://www.programmersheaven.com/mb/CandCP...struct-hostent/ smile.gif
Go to the top of the page
 
+Quote Post
bux
сообщение Sep 13 2010, 06:52
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 5-05-05
Пользователь №: 4 759



int recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
Go to the top of the page
 
+Quote Post
Oops
сообщение Sep 16 2010, 14:17
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 129
Регистрация: 28-08-08
Из: г.Омск
Пользователь №: 39 870



Разобрался, вот пример UDP server'a
Код
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>

#define SOCK_NAME "socket.soc"
#define BUF_SIZE 256

int main(int argc, char ** argv)
{
  struct sockaddr srvr_name, rcvr_name;
  char buf[BUF_SIZE];
  int   sock;
  int   namelen, bytes;

  sock = socket(AF_UNIX, SOCK_DGRAM, 0);
  if (sock < 0)
  {
    perror("socket failed");
    return EXIT_FAILURE;
  }
  srvr_name.sa_family = AF_UNIX;
  strcpy(srvr_name.sa_data, SOCK_NAME);
  if (bind(sock, &srvr_name, strlen(srvr_name.sa_data) +
        sizeof(srvr_name.sa_family)) < 0)
  {
    perror("bind failed");
    return EXIT_FAILURE;
  }
  bytes = recvfrom(sock, buf, sizeof(buf),  0, &rcvr_name, &namelen);
  if (bytes < 0)
  {
    perror("recvfrom failed");
    return EXIT_FAILURE;
  }
  buf[bytes] = 0;
  rcvr_name.sa_data[namelen] = 0;
  printf("Client sent: %s\n", buf);
  close(sock);
  unlink(SOCK_NAME);
}
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 21:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01376 секунд с 7
ELECTRONIX ©2004-2016