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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2010, 14:32   #1
mike_tihomirov
Пользователь
 
Регистрация: 15.02.2010
Сообщений: 58
По умолчанию Сокеты. Что не так?

Всем привет.Учу сеть и вот столкнулся с проблемой.
Нет связи между клиентом и сервером.
На 1 компе при 127.0.0.1 все ок.
Вобщем есть 2 компа, подсоединены к 1 модему в режиме роутера.(если это важно)
1 общий внешний IP к примеру 93.178.80.130, и разные локальные IP
к примеру 1 комп.192.168.1.1 и 2 комп.192.168.1.2.
т.е. предполагаю все работает через NAT(тока что мне это дает).
Запускаю сервер 192.168.1.1 (код упростил до нельзя):
Код:
int _tmain(int argc, _TCHAR* argv[])
{
	WSADATA wsd;
	WSAStartup(MAKEWORD(2, 2), &wsd);

	sockaddr_in serv;
	serv.sin_family = AF_INET;
	serv.sin_port = htons(7500);
	serv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

	SOCKET sServer, sListen;
	sServer = socket(AF_INET, SOCK_STREAM, 0);

	int n = bind(sServer, (sockaddr*) &serv, sizeof(serv));
	
	int m = listen(sServer, 5);
	
	sListen = accept(sServer, NULL, NULL);
	
	char* buf = "server\0";	
	char buf_2_server[7];
	
	recv(sListen, buf_2_server, 7, 0);
	std::cout << "buf_2_server = " << buf_2_server;

	send(sListen, buf, 7, 0);

	std::cin.get();
	return 0;
}
Запускаю с другого компа клиент:
Код:
int _tmain(int argc, _TCHAR* argv[])
{
	WSADATA wsd;
	WSAStartup(MAKEWORD(2, 2), &wsd);

	sockaddr_in clie;
	clie.sin_family = AF_INET;
	clie.sin_port = htons(7500);
	clie.sin_addr.S_un.S_addr = inet_addr("192.168.1.1");

	SOCKET sClient;
	sClient = socket(AF_INET, SOCK_STREAM, 0);

	char* buf = "klient\0";
	char buf_2_client[7];

	connect(sClient, (sockaddr*) &clie, sizeof(clie));
        //Ошибка здесь то бишь нет connect.

	send(sClient, buf, 7, 0);
	recv(sClient, buf_2_client, 7, 0);

	std::cout << "buf_2_client = " << buf_2_client;

	std::cin.get();
	return 0;
}
Может с AF_ че нетак или че незнаю.
Inet обрыскал похожего материала не нашел.
Не бывает глупых вопросов.
Глупец тот, кто не спрашивает.
mike_tihomirov вне форума Ответить с цитированием
Старый 05.06.2010, 15:55   #2
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

Код:
socket(AF_INET,SOCK_STREAM,IPPROTO_TCP );
Кроме того можно использовать WSAGetLastError();
Для определения кода ошибки
подпись
liljon вне форума Ответить с цитированием
Старый 05.06.2010, 16:35   #3
mike_tihomirov
Пользователь
 
Регистрация: 15.02.2010
Сообщений: 58
По умолчанию

Цитата:
Сообщение от liljon Посмотреть сообщение
Код:
socket(AF_INET,SOCK_STREAM,IPPROTO_TCP );
оно то конечно да, но тк 3 параметр неявно определяется типом сокета,
то 0 или IPPROTO_TCP не меняет сути. Но указал вместо 0 в сервере и
клиенте, не але connect = -1.

Кроме того можно использовать WSAGetLastError();
Для определения кода ошибки
Это все есть, убрал чтоб код не разбух.

По поводу telepat.h первый раз слышу. Можно поподробней.
может поможет.

Попробую вообще все на WSA поменять.
Не бывает глупых вопросов.
Глупец тот, кто не спрашивает.
mike_tihomirov вне форума Ответить с цитированием
Старый 05.06.2010, 17:20   #4
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

ничего не меняйте. скажите что WSAGetLastError возвращает после connect
подпись
liljon вне форума Ответить с цитированием
Старый 05.06.2010, 17:28   #5
mike_tihomirov
Пользователь
 
Регистрация: 15.02.2010
Сообщений: 58
По умолчанию

Цитата:
Сообщение от liljon Посмотреть сообщение
ничего не меняйте. скажите что WSAGetLastError возвращает после connect
10060 WSAETIMEDOUT Connection timed out.

епть а почему?
Не бывает глупых вопросов.
Глупец тот, кто не спрашивает.
mike_tihomirov вне форума Ответить с цитированием
Старый 05.06.2010, 17:38   #6
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

а компьютеры вообще пингуются хотябы?
подпись
liljon вне форума Ответить с цитированием
Старый 05.06.2010, 17:53   #7
mike_tihomirov
Пользователь
 
Регистрация: 15.02.2010
Сообщений: 58
По умолчанию

Цитата:
Сообщение от liljon Посмотреть сообщение
а компьютеры вообще пингуются хотябы?
Вот светлая голова.
пинг 0. То биш 4 пакета отправлено 0 получено. Во блин а я долблюсь.
А странно почему, ведь оба компа имеют доступ в инет, с одного
модема.Где искать прям не знаю, и че по этому поводу почитать тоже.
Я вааще думал раз через 1 модем то типа локалка будет.
Не бывает глупых вопросов.
Глупец тот, кто не спрашивает.
mike_tihomirov вне форума Ответить с цитированием
Старый 05.06.2010, 17:58   #8
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

через свитч соединяйте
подпись
liljon вне форума Ответить с цитированием
Старый 09.06.2010, 12:26   #9
mike_tihomirov
Пользователь
 
Регистрация: 15.02.2010
Сообщений: 58
По умолчанию

Цитата:
Сообщение от liljon Посмотреть сообщение
через свитч соединяйте
И снова Ж. Задача: по локалке передать данные с пом. сокетов.
Сеть есть, компы по локалке пингуются.К примеру 192.168.1.2 и
192.168.1.3. Файлы через расшареные папки видно.
А епть клиент на
Код:
connect
продолжает возвращать
Код:
10060
.
Код упрощенных клиента и сервера вверху.
Файерволлы и антивирусники снесены на обоих тестир. компах.
Народ я не планировал заниматься администрированием, но видно
придется.
Что надо еще винде. Может гостям прав добавить, не VPN же делать.
Не бывает глупых вопросов.
Глупец тот, кто не спрашивает.
mike_tihomirov вне форума Ответить с цитированием
Старый 09.06.2010, 16:58   #10
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

пробуйте в командной строке

netsh winsock reset

Потом запускайте серверную часть и через телнет
telnet адресс_сервера 7500

потом netstat и смотрим есть конект или не.

Как вообще эти два компьютера соединены?
Знаете... убедитесь что айпи адресса правильно настроены на компьютерах.
на клиенте 192,168,1,1, а на сервере 192,168,1,2. Убедитесь, что серверная часть запущена на 192,168,1,2
Проверте маску сети 255,255,255,0

Поле "Шлюз" оставте пустым, или напишите в нем 192,168,1,1 или 1,2.

Просто вы где-то начудили
подпись

Последний раз редактировалось liljon; 09.06.2010 в 17:06.
liljon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
А что не так??? frargus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 21.03.2010 08:05
Что не так? rododendron Общие вопросы C/C++ 5 05.05.2009 22:48
Что не так? Alexcomeback Общие вопросы C/C++ 9 07.04.2009 23:14
Что не так? Viento Microsoft Office Excel 3 30.01.2009 14:38
Что-то не так Radiofuck Помощь студентам 2 16.01.2007 22:06