Перейти к содержанию

Клиент-серверное приложение на Си/С++ с помощью Winsock2.h


Рекомендуемые сообщения

Дали задание сделать чат на Си/С++ с помощью Winsock2.h, искал в инете, там ничего понятного не нашел, ибо никогда раньше не работал с этим. Может кто дать пример простейшего чата, чтобы все было понятно.. Или ссылки на такие примеры ))) Заранее благодарю!

Ссылка на комментарий

Делал курсовую на похожую тему. Надо было перемножить матрицу распределённым методом. Два компа подцеплял. Делал на визуале. Вот здесь очень хорошо написано: http://www.helloworld.ru/texts/comp/lang/visualc/vc2/16.htm Если что, можешь и в асю стукнуть, я рпз свой кину.

Ссылка на комментарий
  • 2 недели спустя...

собственно чат сделал, вот листинг (пока консольный):

#include

#include

#include

#include

#include

#pragma hdrstop

#pragma argsused

SOCKET s,s1;

int err;

WSADATA WsaData;

SOCKADDR_IN ss;

//---------------------------------------------------------------------------

void ser()

{

int p;

printf("Vvedite Port:");

scanf("%i",&p);

ss.sin_family=AF_INET;

ss.sin_port=htons(p);

ss.sin_addr.s_addr=INADDR_ANY;

err=bind(s,(LPSOCKADDR)&ss,sizeof(ss));

if(err==-1) printf("2) Bind Error.\n");

else printf("2)Bind GoodLuck.\n");

err=listen(s,SOMAXCONN);

if(err!=0) printf("2) Listen Error.\n");

else printf("2)Listen GoodLuck.\n");

SOCKADDR_IN from;

int fromlen=sizeof(from);

s1=accept(s,(struct sockaddr*)&from,&fromlen);

printf("Accepted connection from %s, port %d\n", inet_ntoa(from.sin_addr), htons(from.sin_port)) ;

char A[50];

while(recv(s1,A,sizeof(A),0)!=SOCKET_ERROR)

{

printf("%s",A);

scanf("%s",&A);

send(s1,A,sizeof(A),MSG_DONTROUTE);

}

}

//----------------------------------------------

void cl()

{

int p;

printf("Vvedite Port:");

scanf("%i",&p);

ss.sin_family=AF_INET;

ss.sin_port=htons(p);

ss.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

err=connect(s,(struct sockaddr*)&ss,sizeof(ss));

if(err==0) printf("Connecting good.\n");

else printf("Error Connecting.\n");

char A[50];

send(s,"Marusya!!!",sizeof("Marusya!!!"),MSG_DONTROUTE);

while(recv(s,A,sizeof(A),0)!=SOCKET_ERROR)

{

printf("%s",A);

scanf("%s",&A);

send(s,A,sizeof(A),MSG_DONTROUTE);

}

}

//----------------------------------------------

void main()

{

int a=0;

err=WSAStartup(0x0101, &WsaData);

if(err==SOCKET_ERROR) printf("1) Wsa Error.\n");

else printf("1)Wsa GoodLuck.\n");

s=socket(AF_INET,SOCK_STREAM,0);

if(s==-1) printf("2) Socket Error.\n");

else printf("2)Socket GoodLuck. #%i\n",s);

dot1:

printf("Server(1) || Client(2) || Exit (3..):");

scanf("%i",&a);

switch(a)

{

case 1:ser();goto dot1;break;

case 2:cl();goto dot1;break;

default: printf("The End.\n");break;

}

system("pause");

}

//---------------------------------------------------------------------------

Остался вопрос, как сделать чтобы сообщения приходили как в обычном чате, эм... асинхронно наверно) И как сделать многопользовательский режим ? Если кто может поделиться опытом, буду очень признателей ) Ну или парой ссылочек полезных !)

Ссылка на комментарий

Думается мне, что такой чат, асинхронный, можно сделать с помощью потоков, в Linux есть и функции потоковые, но в винде я не о чем таком не слышал, и не нашел... Как в винде работать с потоками, подскажет кто ?

TolkienDRR

Тоесть с помощью UDP, можно сделать асинхронную передачу сообщений ?

Ссылка на комментарий

file - new - other - thread object

потом скопируй нужное из новой h-ки и *.cpp файлов в основной *.h и *.cpp чтобы не было проблем с переменными и удали их из проекта

и вообще в инете много норм статей про потоки

Ссылка на комментарий

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...