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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2010, 18:05   #1
Mu$T@nG
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 19
По умолчанию

прошу привести простой пример использования сокетов и желательно с объяснениями

ксати забыл сказать...на С++ мне надо, желательно под VC++

Последний раз редактировалось Stilet; 20.07.2010 в 09:01.
Mu$T@nG вне форума Ответить с цитированием
Старый 19.07.2010, 20:12   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

МСДН, писк по форуму, куча книг, гугл, С++ Ворлд....
p51x вне форума Ответить с цитированием
Старый 19.07.2010, 20:16   #3
Mu$T@nG
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 19
По умолчанию

я нашел куча теории на эту тему, но мне нужен маленький примерчик
Mu$T@nG вне форума Ответить с цитированием
Старый 19.07.2010, 20:54   #4
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

Вот пример, программа пока недописана, но этот кусок работоспособен
Протокол UDP, адресс и порт сервера задаются
#define M_IP "216.207.205.98"
#define M_PORT 27011
порт, на котором висит сокет задаётся #define L_PORT 27015
Программа отправляет символ "q" (0x71) на сервер и ждёт ответа и выводит его.
Visual C++ 2008, консоль.
Код:
#include "stdafx.h"
#include "winsock2.h"
#include "iostream"
#include "stdio.h"

#define WINSOCK_VER MAKEWORD(2,2)

#define L_PORT 27015
#define M_IP "216.207.205.98"
#define M_PORT 27011

const char MASTER_HI[] = {0x71};

WSADATA wsaData;
SOCKET sock = INVALID_SOCKET;

sockaddr_in master;
sockaddr_in meh;
sockaddr_in client_addr;

char buff[1024];

using namespace std;



int _tmain(int argc, _TCHAR* argv[])
{
	meh.sin_family = AF_INET;
	meh.sin_addr.s_addr = INADDR_ANY;
	meh.sin_port = htons(L_PORT);
	master.sin_family = AF_INET;
	master.sin_addr.s_addr = inet_addr(M_IP);
	master.sin_port = htons(M_PORT);

	int client_addr_size = sizeof(client_addr);

	int err = WSAStartup(WINSOCK_VER , &wsaData);
	if (err != 0)
	{
		printf("Winsock init fail, error: %d\n" , err);
		system("pause");
		return 1;
	}

	if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 )
	{   
		printf("Could not find proper winsock dll\n");
		system("pause");
		WSACleanup();
		return 1; 
	}
	printf("Winsock init successful\n");

	sock = socket(AF_INET , SOCK_DGRAM , IPPROTO_UDP);
	if (sock == INVALID_SOCKET)
	{
		printf("Socket creation failed with error: %d\n" , WSAGetLastError());
		system("pause");
		WSACleanup();
		return 1; 
	}
	printf("Bougth a socket to life!\n");

	err = bind(sock, (sockaddr *) &meh, sizeof(meh));
	if (err != 0)
	{
		printf("Socket binding failed, error: %d\n", err);
		system("pause");
		WSACleanup();
		return 1; 
	}
	printf("Socket bound\n");

	sendto(sock, &MASTER_HI[0] , sizeof(MASTER_HI) , 0 , (SOCKADDR *) &master , sizeof(master));
	printf("[%s:%d] >> %s\n", inet_ntoa(meh.sin_addr), ntohs(meh.sin_port), &MASTER_HI[0]);
	while(1)
    {
      int bsize=recvfrom(sock, &buff[0], sizeof(buff)-1, 0, (sockaddr *) &client_addr, &client_addr_size);
      if (bsize==SOCKET_ERROR)
      printf("recv error: %d\n", WSAGetLastError());
	  printf("[%s:%d] >> %s\n", inet_ntoa(master.sin_addr), ntohs(master.sin_port), &buff[0]);
    }

system("pause");

	return 0;
}
ZaRDaK вне форума Ответить с цитированием
Старый 19.07.2010, 20:58   #5
Mu$T@nG
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 19
По умолчанию

о, спасибо огромное, как раз то что мне надо
Mu$T@nG вне форума Ответить с цитированием
Ответ


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