Делаю широковещательный сокет на с++. на клиенте установила setsockopt и в адресе прописала INADDR_BROADCAST. проблема в том, что когда я включаю клиент и сервер на одном компьютере, то всё работает, а когда сервер и клиент располагаются на разных то до сервера ничего не доходит.Пробовали отключать антивирусники, пробовали отключать брандмауэр, соединяться по витой паре, ничего не помогло. Как можно решить эту проблему?
Вот клиент.
// ClientBr.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include "Winsock2.h"
#include
bool GetServer(SOCKET cC,char *call, short port, sockaddr* from, unsigned int flen, int *lto, in_addr addr)
{
try
{
int lobuf = 0;
char ibuf[100000]; //буфер ввода
int lb = 0;
port=htons(2000);
if ((lobuf = sendto(cC,call,strlen(call)+1,NULL,
from, flen)) == SOCKET_ERROR)
throw SetErrorMsgText("recv:");
cout<<"Отправлено сообщение "<
cout<<"Получено "< ErrorMsgText(WSAGetLastError());
cout <<"Код ошибки: "<
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsaData;
system("chcp 1251");
try
{
if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0)
throw SetErrorMsgText("Startup error");
SOCKET cC;
if ((cC = socket(AF_INET, SOCK_DGRAM, NULL))== INVALID_SOCKET)
throw SetErrorMsgText("socket error");
int optval = 1;
if (setsockopt(cC,SOL_SOCKET,SO_BROADCAST,
(char*)&optval,sizeof(optval)) == SOCKET_ERROR)
throw SetErrorMsgText("opt:");
SOCKADDR_IN serv; // параметры сокета cC
serv.sin_family = AF_INET; // используется IP-адресация
serv.sin_port = htons(2000); // порт 2000
serv.sin_addr.s_addr = INADDR_BROADCAST ; // любой собственный IP-адрес inet_addr("127.0.0.1")
char obuf[100000]; //буфер вывода
int lobuf = 0; //количество отправленных
int lb = 0;
int lc = sizeof(serv);
cout<<"Введите сообщение серверу"<
GetServer(cC,obuf,2000,(sockaddr*)&serv, sizeof(serv), &lc,serv.sin_addr);
//cout<<"Ip-адрес сервера: "<
суббота, 13 июля 2019 г.
не работает широковещательный сокет на разных хостах на с++
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий