The OpenNET Project / Index page

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

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

"Проблема :("  
Сообщение от susanin email(ok) on 03-Апр-08, 22:43 
Доброго времени суток, вот есть два небольших куска кода.. Один отправляет пакет, другой принимает. ПРи передаче и приеме ошибок нет, но при попытке вывести содержимое принятого пакета на экран выводится всякая хрень. Помогите пожалуйста исправить ошибки, если они есть.
Вот код отправляющий пакет
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/udp.h>
struct udp_header
{
u_short src_port;
u_short dst_port;
u_short length;
u_short crc;
};

int main(int argc, char *argv[])
{
char buffer[50];
struct udp_header *udph = (struct udp_header*)buffer;
char *message = (char *)buffer + sizeof(struct udp_header);
int s;
int result;
struct sockaddr_in target;

udph->src_port = htons(23);
udph->dst_port = htons(23);
udph->length = 0;
udph->crc = 0;
s = socket(PF_INET, SOCK_RAW, IPPROTO_IP);
if (s < 0) printf("socket failed!\n");
memset(&target, 0, sizeof(target));
target.sin_family = AF_INET;
target.sin_addr.s_addr = inet_addr("192.168.0.11");
strcpy(outm.message, "Hello!");
result = sendto(s, &buffer, sizeof(buffer), 0, (struct sockaddr *)&target, sizeof(target));
if (result < 0) {printf("send failed!\n");}
else printf("Sended %d bytes\n",result);
return result;
}

А вот код, принимающий пакет:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/udp.h>
struct udp_header
{
u_short src_port;
u_short dst_port;
u_short length;
u_short crc;
};

int main(int argc, char* argv[])
{
int s;
char buffer[50];
struct udp_header *udph = (struct udp_header*)buffer;
char *message = (char *) buffer + sizeof(struct udp_header);
int result;
struct sockaddr_in sourse;
int sourse_len;
memset(&sourse, 0, sizeof(sourse));
sourse.sin_family = AF_INET;
sourse.sin_addr.s_addr = inet_addr(/*argv[1]*/"192.168.0.11");
sourse_len = sizeof(sourse);
s = socket(PF_INET, SOCK_RAW, IPPROTO_IP);
while (1)
{
result = recvfrom(s, &buffer, sizeof(buffer), 0, (struct sockaddr*)&sourse, &sourse_len);
if (result > 0)
  {
   printf("Received %d bytes\n",result);
   printf("%s\n",message);
  }
}
}

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

 Оглавление

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


1. "Проблема :("  
Сообщение от domas (ok) on 05-Апр-08, 18:25 
Представаленный код совершенно не работоспособен.

Первое чо бросается в глаза - тип сокета SOCK_RAW, а достаточной инициализации не вижу.

Второе - sendto() отправляет не инициализированный масив buffer, а принимающая сторона выводит не buffer, в который приняла, а message в котором какая-то порнография записана.

Идея программы, как я понял(чудом), вывести сообщение + заголовки udp. Но такая чушь написанна...

Итого: не хочу показаться грубым, но для начала RTFM по C!

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

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

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




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

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