Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 12.01.2014, 16:58   #1
Заблокирован
 Разведчик
Аватар для Artich2
 
Artich2 вызывает надежду
Регистрация: 08.02.2012
Сообщений: 7
Популярность: -44
Сказал(а) спасибо: 14
Поблагодарили 0 раз(а) в 0 сообщениях
 
Smile Сокеты типа сервер-клиент

Вот решыл выложыть свой "чат" типа сервер-клиент
Работает по интернет соиденинию кто хочет можем пообщатся))
Вот код
Клиент:
Цитата:
#include <stdio.h>
#include <iostream>
#include <winsock2.h>
#include <windows.h>
#pragma comment( lib, "wsock32.lib" )
using namespace std;
void ExitProgramm(char*reason);
SOCKET s;
char response[1024] = {0};
int main(int argc, char* argv[])
{
sockaddr_in dest_addr;
WSADATA wd;
WSAStartup( MAKEWORD( 2, 2 ), &wd );

s = socket( AF_INET, SOCK_STREAM, 0 );
if (s == INVALID_SOCKET) return 255;

dest_addr.sin_addr.s_addr = inet_addr( "192.168.1.3" );
dest_addr.sin_port = htons( 666 );
dest_addr.sin_family = AF_INET;


if(connect( s, (struct sockaddr*)&dest_addr, sizeof( dest_addr ) ) == SOCKET_ERROR) {
printf(" Connection error\n");
system("PAUSE");
return 0;
}
int data_recv=recv(s,response,sizeof(response),0);
int data_send=send(s,response,strlen(response),0);
while(1)
{
if(GetAsyncKeyState(VK_F6))
{
memset(response,0,sizeof(response));
data_recv = recv(s,response,sizeof(response),0);
if(data_recv == SOCKET_ERROR)
{
printf("Recv ERROR\n");
break;
}
printf("%s\n",response);
Sleep(1000);
}
if(GetAsyncKeyState(VK_F5))
{
cout<<"Enter message:";
cin>>response;
if(_stricmp(response,"Exit")==0)
ExitProgramm("Exit");
data_send = send(s,response,strlen(response),0);
if(data_send == SOCKET_ERROR)
{
printf("Send error\n");
break;
}
Sleep(1000);
}
if(GetAsyncKeyState(VK_TAB))
system("cls");
if(_stricmp(response,"Start")==0)
{
memset(response,0,sizeof(response));
recv(s,response,strlen(response),0);
HWND Test=FindWindow(NULL,response);
}
}

closesocket( s );
WSACleanup();
system("pause");
return 0;
}

void ExitProgramm(char*reason)
{
if(send(s,reason,strlen(reason),0) == SOCKET_ERROR)
{
printf("Send error\n");
}
closesocket( s );
WSACleanup();
}

Сервер:
Цитата:
#include <stdio.h>
#include <iostream>
#include <winsock2.h>
#pragma comment( lib, "wsock32.lib" )
using namespace std;
void Chat(char*buff,SOCKET soc);
SOCKET s;
int client_number = 0;
int main(int argc, char* argv[])
{
printf(" TCP Server by Nesh\n\n\n");
char response[1024] = {0};
char buff[1024*20];
sockaddr_in s_a;
WSADATA wd;


WSAStartup( MAKEWORD( 2, 2 ), &wd );

s = socket( AF_INET, SOCK_STREAM, 0 );
if (s == INVALID_SOCKET) return 255;

s_a.sin_addr.s_addr = inet_addr(
"192.168.1.3"//"127.0.0.1"
);
s_a.sin_port = htons( 666 );
s_a.sin_family = AF_INET;

if(bind(s,(sockaddr *)&s_a,sizeof(s_a)) == SOCKET_ERROR) {
cout << "Bind error" << endl;
return 0;
}
if(listen(s,0x3) == SOCKET_ERROR) {
cout << "Listen error" << endl;
return 0;
}
printf("Waiting connection...\n");
sockaddr_in client_addr;
int client_addr_size = sizeof(client_addr);
SOCKET client_socket;
while(client_socket = accept(s,(sockaddr *)&client_addr,&client_addr_size)) {
if(client_socket == SOCKET_ERROR) {
printf("--------------SOCKET ERROR-----------");
break;}
client_number++;

HOSTENT *hst;
hst=gethostbyaddr((char *) &client_addr.sin_addr.s_addr,4,AF_INET);
printf("+%s [%s] new connect,client number is %d !\n",(hst)?hst->h_name:"",inet_ntoa(client_addr.sin_addr),client_ number);
cout<<"Start Chat"<<endl;
Chat(buff,client_socket);
break;
}
cout<<"Server Closed"<<endl;
closesocket( s );
WSACleanup();
system("pause");
return 0;
}

void Chat(char*buff,SOCKET soc)
{
int other=0;
char *text = "Socket connected";
send(soc,text,strlen(text),0);
memset(buff,0,sizeof(buff));
recv(soc,buff,strlen(buff),0);
SOCKET client_socket;
sockaddr_in client_addr;
int client_addr_size = sizeof(client_addr);
while(_stricmp((buff),"Exit")!=0)
{
cin>>buff;
other=send(soc,buff,strlen(buff),0);
if(GetAsyncKeyState(VK_F5))
other=recv(soc,buff,strlen(buff),0);
if(GetAsyncKeyState(VK_TAB))
system("cls");
if(_stricmp(buff,"AddClient")==0)
{
client_socket = accept(s,(sockaddr *)&client_addr,&client_addr_size);
if(client_socket == SOCKET_ERROR) {
printf("\n--------------SOCKET ERROR-----------\nYou must run more clients");}
client_number++;

HOSTENT *hst;
hst=gethostbyaddr((char *) &client_addr.sin_addr.s_addr,4,AF_INET);
printf("+%s [%s] new connect,client number is %d !\n",(hst)?hst->h_name:"",inet_ntoa(client_addr.sin_addr),client_ number);
char *text = "Socket connected";
send(soc,text,strlen(text),0);
memset(buff,0,sizeof(buff));
recv(soc,buff,strlen(buff),0);
}
}
cout<<"End Chat"<<endl;
send(soc,buff,strlen(buff),0);
}

Собственно если кто нибудь захочет со мной пообщатся то код изменять не надо

чтоб обмениватся данными по локальной сети нужно заменить
Цитата:
s_a.sin_addr.s_addr = inet_addr("192.168.1.3"");

на
Цитата:
s_a.sin_addr.s_addr = inet_addr("127.0.0.1");

В сервере это ип на котором он стоит а в клиенте это ип к которому он будет конектится
Скажу сразу взял код с примера но слегка его доработал
Запускаем сервер - Запускаем клиент
Чтоб добавить больше клиентов пушем в сервере AddClient - но пока что обменивается данными сервер только с 1 клиентом (пока хз как исправить)
пишем сообщение в сервере - заходим в клиент нажымаем ф6 и вот наше сообщение
нажимаем ф5 в клиенте-пишем -нажимаем ф5 в сервере -читаем
пишем в сервере Exit - выодим
нажымаем ф5 в клиенте - Exit - выходим + отправляется сообщение серверу
Вот и все
[Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ]
Скажу вам сразу если антивир ругается то ничего страшного там ничего нету код собственно перед вами
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
Удачи в изучении сокетов и с++
Не жмемся на спасибки и +
  Ответить с цитированием
Старый 12.01.2014, 17:21   #2
Заблокирован
 Рыцарь-капитан
Аватар для warl0ck
 
warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(
Регистрация: 29.01.2010
Сообщений: 547
Популярность: 41279
Сказал(а) спасибо: 692
Поблагодарили 2,270 раз(а) в 1,035 сообщениях
 
По умолчанию Re: Сокеты типа сервер-клиент

Цитата:
Сообщение от Artich2Посмотреть сообщение
Собственно если кто нибудь захочет со мной пообщатся то код изменять не надо

у тебя в коде указан локальный ип
  Ответить с цитированием
Старый 12.01.2014, 17:50   #3
 Старший сержант
Аватар для Sinyss
 
Sinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака Норриса
Регистрация: 29.07.2011
Сообщений: 197
Популярность: 8989
Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
Отправить сообщение для Sinyss с помощью Skype™
 
По умолчанию Re: Сокеты типа сервер-клиент

Цитата:
Сообщение от warl0ckПосмотреть сообщение
у тебя в коде указан локальный ип

А он для соседа выложил, видишь что он 3й в сети? ) значит еще 1 человек есть ))))
  Ответить с цитированием
Старый 13.01.2014, 17:56   #4
Заблокирован
 Разведчик
Аватар для Artich2
 
Artich2 вызывает надежду
Регистрация: 08.02.2012
Сообщений: 7
Популярность: -44
Сказал(а) спасибо: 14
Поблагодарили 0 раз(а) в 0 сообщениях
 
Thumbs up Re: Сокеты типа сервер-клиент

Цитата:
Сообщение от SinyssПосмотреть сообщение
А он для соседа выложил, видишь что он 3й в сети? ) значит еще 1 человек есть ))))

без понятия что ты хочешь сказать но я выложыл там локальный ип и мой
Свой ип можно узнать Панель управления - Сети - клацаешь на свою (Укртелеком например) и там сведенья - Ip Pv4 это есть твой ип
  Ответить с цитированием
Старый 13.01.2014, 19:14   #5
 Старший сержант
Аватар для Sinyss
 
Sinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака Норриса
Регистрация: 29.07.2011
Сообщений: 197
Популярность: 8989
Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
Отправить сообщение для Sinyss с помощью Skype™
 
По умолчанию Re: Сокеты типа сервер-клиент

Цитата:
Сообщение от Artich2Посмотреть сообщение
s_a.sin_addr.s_addr = inet_addr("192.168.1.3"");

Твой IP в локальной сети
Цитата:
Сообщение от Artich2Посмотреть сообщение
s_a.sin_addr.s_addr = inet_addr("127.0.0.1");

localhost(внутренний IP для компа) твоего компа...
  Ответить с цитированием
Старый 13.01.2014, 19:14   #6
Заблокирован
 Разведчик
Аватар для Artich2
 
Artich2 вызывает надежду
Регистрация: 08.02.2012
Сообщений: 7
Популярность: -44
Сказал(а) спасибо: 14
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Сокеты типа сервер-клиент

Цитата:
Сообщение от warl0ckПосмотреть сообщение
у тебя в коде указан локальный ип

нет вроде
он закоментирован если я не ошыбаюсь

Добавлено через 2 минуты
Цитата:
Сообщение от SinyssПосмотреть сообщение
Твой IP в локальной сети

:c
тогда как мне узнать свой инет ип?
подскажы если не сложно

Последний раз редактировалось Artich2; 13.01.2014 в 19:17. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 17.01.2014, 08:38   #7
 Пехотинец
Аватар для twice
 
twice на правильном путиtwice на правильном пути
Регистрация: 07.07.2012
Сообщений: 60
Популярность: 171
Сказал(а) спасибо: 3
Поблагодарили 11 раз(а) в 10 сообщениях
 
По умолчанию Re: Сокеты типа сервер-клиент

Цитата:
Сообщение от Artich2Посмотреть сообщение
Свой ип можно узнать Панель управления - Сети - клацаешь на свою (Укртелеком например) и там сведенья - Ip Pv4 это есть твой ип

Открою тебе секрет. Совсем не факт, что он совпадет с тем ip, который будут видеть у тебя "из вне".
  Ответить с цитированием
Старый 17.01.2014, 16:38   #8
Заблокирован
 Рыцарь-капитан
Аватар для warl0ck
 
warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(
Регистрация: 29.01.2010
Сообщений: 547
Популярность: 41279
Сказал(а) спасибо: 692
Поблагодарили 2,270 раз(а) в 1,035 сообщениях
 
По умолчанию Re: Сокеты типа сервер-клиент

Цитата:
Сообщение от Artich2Посмотреть сообщение
тогда как мне узнать свой инет ип?
подскажы если не сложно

к примеру зайти на 2ip.ru и посмотреть. потом зайти в настройки модема и пробросить порты.
  Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] Помогите найти сервер типа БСФГ StarBoykiller Общение и обсуждение, архив Lineage 2 2 05.05.2013 03:19
[Файл] SA:MP 0.3x - клиент, сервер. YourMate Другие Игры 0 31.01.2013 19:28
[Программа] Сервер-Клиент Steam~ Вопросы и ответы, обсуждения 13 20.05.2012 17:28
[Подсказка] Клиент/Сервер Filanchuk1 Общение и обсуждение Perfect World 2 12.05.2010 11:57
2.4.3 (ВС) сокеты и мета сокеты в любую шмотку!! -SHiSH- Читы, баги и статьи по WoW 0 26.04.2010 18:15

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 15:11.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net