LINUX.ORG.RU
решено ФорумAdmin

Virtual Box и TCP connection

 , , ,


1

1

Добрый день! Мне нужно сделать тестовые приложения для UDP соединения, выбрал простые С++ консольные приложение на eclipse, с иcпользованием «sys/socket.h» первое - будет сервером и раздавать всем сообщение на указаный порт, второе - будет отвечать, если получит сообщение от сервера

Можно ли наладить соединение на виртуальной машине Virtual Box, или из-за виртуальной машины возникнут проблемы?

Подскажите пожалуйста.

Заранее спасибо.

Ответ на: комментарий от vvviperrr

пример

Ранее создания сокетов сам не описывал, пока попробовал «чужой» вариант (хочу увидеть как будет работать соединение, а потом буду передавать необходимые мне структуры данных)

http://www.it.uom.gr/project/client_server/socket/socket/

первых 2 примера: udpServer.c udpClient.c запускаю оба - соединения нет, по крайней мере клиент не получает ничего

Подскажите, что я не так делаю?

maxmail ()
Ответ на: пример от maxmail

На одной виртуалке клиент и сервер запускаешь? Если на разных, проверь фаервол, например.

generator ★★★ ()
Ответ на: комментарий от generator

я не уверен что отлючил ( service iptables stop пишет «iptables: unrecognized service»)

но через «netstat -au» udp соединение с заданным мною портом которое я создаю - есть поэтому, клиент должен его услышать, или я не прав?

maxmail ()
Ответ на: комментарий от generator

Да на одной, сейчас на виртуалке запущены 2 «еклипса» в одном описан клиент на другом сервер, и я пробую запустить сервер потом клиент. И пока не могу получить первый сигнал на клиенте

maxmail ()

TCP connection
нужно сделать тестовые приложения для UDP соединения

Отлично, чо.

По сути: если загнать обе машины во «внутреннюю сеть» или повесить на один и тот же «bridged» виртуальный адаптер, то все будет хорошо.

thesis ★★★★★ ()
Ответ на: комментарий от maxmail

/* fpont 12/99 */ /* pont.net */ /* udpClient.c */

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <stdio.h> #include <unistd.h> #include <string.h> /* memset() */ #include <sys/time.h> /* select() */

#define REMOTE_SERVER_PORT 1505 #define MAX_MSG 100

int main(int argc, char *argv[]) { printf(«main\n»);

int sd, rc, i;

struct sockaddr_in cliAddr, remoteServAddr;

struct hostent *h;

/* check command line args */ if(argc<3) {

printf(«\nusage : %s <server> <data1> ... <dataN> \n», argv[0]);

}

/* get server IP address (no check if input is IP address or DNS name */ h = gethostbyname(argv[1]); printf(«main1\n»); fflush(stdout); if(h==NULL) { printf(«\n%s: unknown host '%s' \n», argv[0], argv[1]);

}

printf(«\n%s: sending data to '%s' (IP : %s) \n», argv[0], h->h_name, inet_ntoa(*(struct in_addr *)h->h_addr_list[0]));

remoteServAddr.sin_family = h->h_addrtype;

memcpy((char *) &remoteServAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length);

remoteServAddr.sin_port = htons(REMOTE_SERVER_PORT);

printf(«main2\n»); /* socket creation */ sd = socket(AF_INET,SOCK_DGRAM,0); if(sd<0) { printf(«\n%s: cannot open socket \n»,argv[0]);

} printf(«main3\n»);

/* bind any port */ cliAddr.sin_family = AF_INET;

cliAddr.sin_addr.s_addr = htonl(INADDR_ANY);

cliAddr.sin_port = htons(1506);

printf(«main4\n»); rc = bind(sd, (struct sockaddr *) &cliAddr, sizeof(cliAddr)); if(rc<0) { printf(«\n%s: cannot bind port\n», argv[0]); }

printf(«main5\n»);

/* send data */ for(i=2;i<argc;i++)

{ rc = sendto(sd, argv, strlen(argv)+1, 0, (struct sockaddr *) &remoteServAddr, sizeof(remoteServAddr));

if(rc<0) { printf(«\n%s: cannot send data %d \n»,argv[0],i-1); close(sd); } printf(«main6\n»); }

return 1;

}

Для отслеживания выполнения кода поставил «printf(„main“);» но вывелся только первый, почему так, кто знает?

maxmail ()
Ответ на: комментарий от thesis

Да, это не из-за настроек виртуал бокса.

Написал новый сокет для клиента - все заработало. Всем спасибо кто откликнулся!

maxmail ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.