Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2008, 12:29   #1
fire64
Новичок
Джуниор
 
Регистрация: 12.03.2008
Сообщений: 1
По умолчанию работа с сокетами, содержимое пакетов

я начинающий кодер, сейчас изучаю сокеты
вот программа отправляющая udp пакет
Код:
#include <stdio.h>
#include "winsock2.h"
#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT "27015"

void main() {
  
  WSADATA wsaData;
  SOCKET SendSocket;
  sockaddr_in RecvAddr;
  int Port = 27015;

  //---------------------------------------------
  // Initialize Winsock
  WSAStartup(MAKEWORD(2,2), &wsaData);

  //---------------------------------------------
  // Create a socket for sending data
  SendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

  //---------------------------------------------
  // Set up the RecvAddr structure with the IP address of
  // the receiver (in this example case "123.456.789.1")
  // and the specified port number.
  RecvAddr.sin_family = AF_INET;
  RecvAddr.sin_port = htons(Port);
  RecvAddr.sin_addr.s_addr = inet_addr("10.207.112.107");
  char pack[] = "яяяяTSource Engine Query"; 

  //---------------------------------------------
  // Send a datagram to the receiver
  sendto(SendSocket, pack,

  sizeof(pack),
    0, 
    (SOCKADDR *) &RecvAddr, 
    sizeof(RecvAddr));

  //---------------------------------------------
  // When the application is finished sending, close the socket.
  closesocket(SendSocket);

  //---------------------------------------------
  // Clean up and quit.
  WSACleanup();
  return;
}
сейчас хочу написать вторую часть которая бы принимала пакеты и выводила их содержимое в консоль
но проблема в том что порт для отправки пакета каждый раз разный вопрос как быть ?
принимать udp пакеты планирую через функцию recvfrom

Последний раз редактировалось fire64; 12.03.2008 в 12:32.
fire64 вне форума Ответить с цитированием
Старый 15.03.2008, 08:38   #2
merax
Форумчанин
 
Регистрация: 27.12.2006
Сообщений: 955
По умолчанию

Присмотритесь внимательно к етому коду, вернее процедуре

Код:
BOOL CreateOutgoingSocket(void)
{
struct sockaddr_in srv_address;
int namelen;

sock_out = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

if(sock_out != INVALID_SOCKET) 
{
  memset(&srv_address,0,sizeof(SOCKADDR_IN));
   srv_address.sin_addr.S_un.S_addr=INADDR_ANY;
    srv_address.sin_family = AF_INET;
     srv_address.sin_port = 0;
}

 if(bind(sock_out, (SOCKADDR *) &srv_address, sizeof(SOCKADDR_IN)) == SOCKET_ERROR) 
{
  closesocket(sock_out);
  return FALSE;
}
 else
 {
  namelen=sizeof(SOCKADDR_IN);
  getsockname(sock_out,(SOCKADDR *)&srv_address,&namelen);
  return TRUE; 
 }
}
Строчка:

srv_address.sin_port = 0;

означает, что система создаст сокет на первый же попавшийся свободный порт. Что из этого следует?
merax вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение и чтение входящих UDP пакетов XAOC-forever Работа с сетью в Delphi 6 03.06.2008 10:02
Небольшая проблема с сокетами RoamingFire Работа с сетью в Delphi 3 27.02.2008 22:58
Проблема со сборкой IP пакетов Дядя Фёдор Работа с сетью в Delphi 0 28.08.2007 11:19
Помогите с сокетами delphier Работа с сетью в Delphi 0 19.08.2007 19:03
Работа с сокетами vasilii_terkin Работа с сетью в Delphi 2 13.02.2007 11:08