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

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

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2011, 21:24   #1
DETONAVOMEK
Пользователь
 
Регистрация: 25.06.2010
Сообщений: 28
По умолчанию Простое приложение клиент-сервер

Всем привет. Я с сокетами раньше не работал.Знаю, что этот вопрос задавался много раз, но я не смог найти ответ на него. Мне надо элементарный чат на С++ с использованием TCI\IP. Гуглю уже несколько часов и нигде не могу найти работающее приложение на Microsoft Visual Studio 2008. Буду очень признателен, если кто-то кинет пример.
DETONAVOMEK вне форума Ответить с цитированием
Старый 22.10.2011, 01:08   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

никто не скинет...
давай код, подумаем...
counter вне форума Ответить с цитированием
Старый 22.10.2011, 21:49   #3
DETONAVOMEK
Пользователь
 
Регистрация: 25.06.2010
Сообщений: 28
По умолчанию

Вот код(взял в инете). Выдает ошибки рода:
"Error 7 error LNK2019: unresolved external symbol __imp__listen@8 referenced in function _main a1.obj",
"Error 10 error LNK2019: unresolved external symbol __imp__socket@12 referenced in function _main a1.obj",
"Error 12 fatal error LNK1120: 9 unresolved externals С:\soket_server.exe"

Вот сам код:
Сервер:

#include<stdio.h>
#include<iostream>
#include <winsock2.h>
#include <string.h>
using namespace std;

DWORD WINAPI ThreadFunc(LPVOID client_socket)
{
SOCKET s2=((SOCKET *) client_socket)[0];
char buf[100];
char res[100], *z;
strcpy(res, "");
while(recv(s2,buf,sizeof(buf),0))
{
int n=0,k=0;
k=strlen(buf)-1;
if (k>=15)
{
z=buf;
sscanf(z+=n," %s%n",res, &n);
//cout<<buf<<endl;
send(s2,res,100,0);
}
else
send(s2,"The string lenght is less than 15 symbols",100,0);
}
closesocket(s2);
return 0;
}


int numcl=0;

//*********************************** *************************

void print()
{
if (numcl) printf("%d client connected\n",numcl);
else printf("No clients connected\n");
}

//*********************************** *************************

void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ){return;}

SOCKET s=socket(AF_INET,SOCK_STREAM,0);
sockaddr_in local_addr;
local_addr.sin_family=AF_INET;
local_addr.sin_port=htons(1280);
local_addr.sin_addr.s_addr=0;
bind(s,(sockaddr *) &local_addr,sizeof(local_addr));
int c=listen(s,5);
cout<<"Server receive ready"<<endl;
cout<<endl;
SOCKET client_socket;
sockaddr_in client_addr;
int client_addr_size=sizeof(client_addr );
while((client_socket=accept(s,(sock addr *)&client_addr, &client_addr_size)))
{
numcl++;
print();
DWORD thID;// thID идентификатор типа DWORD
CreateThread(NULL,NULL,ThreadFunc,& client_socket,NULL,&thID);
}
}


Клиент:
#include<stdio.h>
#include<iostream>
#include<winsock2.h>
using namespace std;

void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err=WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ){return;}

while (true)
{
SOCKET s=socket(AF_INET,SOCK_STREAM,0);
sockaddr_in dest_addr;
dest_addr.sin_family=AF_INET;
dest_addr.sin_port=htons(1280);
dest_addr.sin_addr.s_addr=inet_addr ("127.0.0.1");
connect(s,(sockaddr *)&dest_addr,sizeof(dest_addr));

char buf[100];

cout<<"Enter the string:"<<endl;
fgets(buf,sizeof(buf),stdin);
send(s,buf,100,0);

if (recv(s,buf,sizeof(buf),0)!=0)
{
cout<<"Received string:"<<endl<<buf<<endl;
}
closesocket(s);
}
WSACleanup();
}
DETONAVOMEK вне форума Ответить с цитированием
Старый 24.10.2011, 21:23   #4
DETONAVOMEK
Пользователь
 
Регистрация: 25.06.2010
Сообщений: 28
По умолчанию

Что нужно сделать, если на #include <socket.h> выдает ошибку? То есть, как правильно подключить эту библиотеку, и где ёё взять?
DETONAVOMEK вне форума Ответить с цитированием
Старый 03.11.2011, 10:13   #5
_drug_
 
Регистрация: 03.11.2011
Сообщений: 3
По умолчанию

Не знаю, актуально еще или нет. Но ошибки у тебя выдает компоновщик на стадии линковки, т.к. не находит нужные функции listen() и connect(). Хранятся они в либах типа wsock32_2 или ws32_2 - точно уже не помню. Погугли на эту тему. Подключишь нужную библиотеку, получишь программу. Т.к. код компилируется.
#include <socket.h> - такого заголовочного файла не знаю, ты видимо, пытаешься подобрать решение. =) Сразу говорю, оно неверное.
Ищи в гугле подключение библиотек в Microsoft Visual Studio 2008, я в студии не работаю, не подскажу.
_drug_ вне форума Ответить с цитированием
Старый 05.11.2011, 23:55   #6
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Код:
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")
counter вне форума Ответить с цитированием
Старый 22.06.2012, 11:16   #7
DETONAVOMEK
Пользователь
 
Регистрация: 25.06.2010
Сообщений: 28
По умолчанию

Спасибо, разобрался.
DETONAVOMEK вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сервер-клиент приложение Яшар Общие вопросы Delphi 8 30.05.2011 22:27
Клиент/сервер приложение HarmonicMan Работа с сетью в Delphi 0 27.04.2010 21:51
Приложение клиент\сервер с БД Vol666 БД в Delphi 1 08.10.2009 12:28
Приложение клиент\сервер Vol666 Работа с сетью в Delphi 5 08.10.2009 09:06
Возможно-ли Клиент-серверное приложение типа Клиент(Pascal) а сервер(CGI)? Demol Работа с сетью в Delphi 1 21.04.2009 16:18