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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2009, 21:17   #1
SL1CK
Пользователь
 
Регистрация: 15.03.2009
Сообщений: 84
По умолчанию Сокеты

Хочу написать небольшую программку с использованием сокетов..

У кого есть какая-то литература или статьи о сокетах или примеры, исходники?
SL1CK вне форума Ответить с цитированием
Старый 29.08.2009, 21:27   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

unix. разработка сетевых приложений.
программирование для сетей в microsoft windows.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 29.08.2009, 21:28   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

MSDN смотреть accept, socket, listen, send, recv, closesocket. Там же все написано, какие параметры и как использовать + примеры.
BOBAH13 вне форума Ответить с цитированием
Старый 29.08.2009, 21:44   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

+ http://programmersforum.ru/showthread.php?t=54967

И еще загляните сюда: http://programmersforum.ru/showthread.php?t=60338
Может, заинтересует.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 29.08.2009, 22:58   #5
SL1CK
Пользователь
 
Регистрация: 15.03.2009
Сообщений: 84
По умолчанию

спасибо за ссылки! Может у кого нибудь есть исходник какой-то простенькой программки с использованием сокетов?
SL1CK вне форума Ответить с цитированием
Старый 30.08.2009, 03:49   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Пример. Сервер выводит сообщение, посланное клиентом.
Сначала запустить server.exe. Потом client.exe. Ввести IP 127.0.0.1. Проверьте, чтобы фаервол не блокировал программу.

server.cpp
Код:
#include <stdio.h>
#include <winsock2.h>

int main()
{
WSADATA WsaData;
int err = WSAStartup(MAKEWORD(2,0),&WsaData);
if(err==SOCKET_ERROR)
 {
  printf("WSASturtup() failed: %ld\n",GetLastError());
  getchar();
  return 1; 
 }
	   
short int prt = 5555;  

int sk = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(prt);
sin.sin_addr.s_addr = INADDR_ANY;
err = bind(sk,(LPSOCKADDR)&sin,sizeof(sin));
if(err==-1) 
{ 
 printf("bind() failed: %ld\n",GetLastError());
 if(GetLastError()==10048)
  printf("Port %d already is used!\n",prt);
 getchar();
 WSACleanup();
 return 1;
} 

if(listen(sk,SOMAXCONN)!=0)
{
 printf("listen() failed: %ld\n", GetLastError());
 WSACleanup();
 getchar();
 return 1;
}
int s1 = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
SOCKADDR_IN from;
int fromlen = sizeof(from);
s1 = accept(sk, (struct sockaddr*)&from,&fromlen);
printf("accepted connection from %s, port %d\n\n",inet_ntoa(from.sin_addr),htons(from.sin_port));
 
char msg[100];
    
recv(s1,msg,sizeof(msg),0);  

printf("%s\n",msg);

closesocket(sk);
printf("End session.\n");  
    
getchar();    
return 0;    
}
client.cpp
Код:
#include <stdio.h>
#include <winsock2.h>

int main()
{

WSADATA WsaData;
int err = WSAStartup(MAKEWORD(2,0),&WsaData);
if(err==SOCKET_ERROR)
 { 
 printf("WSASturtup() failed: %ld\n",GetLastError());
 fflush(stdin);
 getchar();
 return 1;
 }

char sip[15];
short int prt;       

printf("Enter IP: ");
scanf("%s",sip); // IP adress

prt = 5555;
       
int s1 = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(prt);
sin.sin_addr.S_un.S_addr = inet_addr(sip);

err = connect(s1, (struct sockaddr*)&sin,sizeof(struct sockaddr));
if(err==-1)
 {
  printf("No connection!\n");
  fflush(stdin);
  getchar();
  return 1;   
 }
printf("accepted connection with %s, port %d\n\n",inet_ntoa(sin.sin_addr),htons(sin.sin_port));

char msg[100];

strcpy(msg,"Hello, socket!");

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

closesocket(s1);
printf("End session.\n");
   
fflush(stdin);       
getchar();       
return 0;
}
Не забудьте прилинковать библиотеку WSock32.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 05.10.2009, 11:24   #7
Rosicky
 
Регистрация: 05.10.2009
Сообщений: 8
По умолчанию

Вопрос -- как при помощи сокетов реализовать передачу фалов? интересует разбитие файлов на сегменты и сама процедура передачи. Заранее спасибо.
Rosicky вне форума Ответить с цитированием
Старый 05.10.2009, 11:34   #8
lennon
Заблокирован
 
Регистрация: 18.11.2007
Сообщений: 254
По умолчанию

Цитата:
Сообщение от Rosicky Посмотреть сообщение
Вопрос -- как при помощи сокетов реализовать передачу фалов? интересует разбитие файлов на сегменты и сама процедура передачи. Заранее спасибо.
ненадо никаких сигментов. еси собираешься использовать передачу команд и файлов на одном порту , шлешь информацию о том , что щас будет передаваться файл указаной длины.
ОТкрываешь файл читаешь в буфер и отправляешь буффер через send

Сервер после сообщения о том что будет передаваться файл принимает и считает колличество полученных байт, когда оно достигает длины указаной ранее в запросе перед посылкой файла , будет значить что файл принят.

если на 2 порта(команды серверу на один порт и поток байт на другой) то почитай про протокол фтп
lennon вне форума Ответить с цитированием
Старый 05.10.2009, 13:20   #9
Rosicky
 
Регистрация: 05.10.2009
Сообщений: 8
По умолчанию

Цитата:
Сообщение от lennon Посмотреть сообщение
ненадо никаких сигментов. еси собираешься использовать передачу команд и файлов на одном порту , шлешь информацию о том , что щас будет передаваться файл указаной длины.
ОТкрываешь файл читаешь в буфер и отправляешь буффер через send

Сервер после сообщения о том что будет передаваться файл принимает и считает колличество полученных байт, когда оно достигает длины указаной ранее в запросе перед посылкой файла , будет значить что файл принят.

если на 2 порта(команды серверу на один порт и поток байт на другой) то почитай про протокол фтп
Спасибо, попробую разобраться.!
Rosicky вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сокеты IICuX123 Общие вопросы .NET 6 27.07.2009 01:27
Сокеты Raz0r Помощь студентам 2 29.04.2009 14:47
Сокеты ben95 Общие вопросы Delphi 7 09.03.2008 23:26
сокеты cross Работа с сетью в Delphi 2 21.12.2006 18:12