Войти
ПрограммированиеФорумСеть

Полное руководство по сетевому программированию для разработчиков игр. Часть 4. TCP (Комментарии к статье) (2 стр)

Страницы: 1 2 3 Следующая »
#15
17:32, 13 мар. 2005

Мне надо написать почтового клиента. Вот я уже как бы законнектился к почтовому серверу. Как мне определит его реакцию? Чтоб я не посылал, recv() проходит успешно, но ничего не принимает - буффер пустой.
char BUFFER[4096];
ret = recv(sock, BUFFER, sizeof(BUFFER), 0);
if(ret)
{
cout<<"Error in recMess"<<endl;
ErrorInfo();
exit(1);
}


#16
10:05, 22 мар. 2005

Polupoker
Не забывай добавлять конец строки \r\n, при посылке сообщения на мэйлсервер.

Прошло более 1 года
#17
15:37, 25 июня 2006

А продолжение будит?

#18
0:34, 23 авг. 2006

Требуем продлжения банкета! ©

#19
21:45, 30 ноя. 2006

Точно! Шайбу! Шайбу! О чем это я? Продолжению быть! Читается как рассказ, полезность от прочтения - все 200%. Не есть и не спать, а выдавать уголек на гора. Народ требует.

Прошло более 7 месяцев
#20
10:11, 23 июля 2007

отлично, хочется продолжения!)
вот бы еще побольше примеров работы)))) для наглядности)

#21
10:22, 23 июля 2007

бесполезная статья, расчитанная на полных нубов в сетевом кодинге, да и для них она больше вреда принесет чем пользы.
только общие фразы и понятия не более того. с таким же успехом можно прочесть книжку средней руки по азам сетевого программирования.
где прикладная часть? например использования Completion Port в Windows или WSAEvents ???
где расписаны плюсы и минусы блокирующих и не блокирующих сокетов, что это такое и с чем это надо кушать.
где варианты с использованием пула потоков с ждущим сокетом в каждом потоке  и ответ на вопрос почему это ЗЛО?

в конце концов смое оно было бы рассмотреть схему организации серверной части, обеспечивающей заветные 10К клиентов как под Windows так и под Unix

PS а переписать теор часть из книжки ума много не надо. самое оно это именно прекладная часть.

#22
22:08, 23 июля 2007

2progman
можешь напиши лучше, я, и еще полсотни нубов,  тебе скажут спасибо.

#23
11:03, 24 июля 2007

nix
http://www.gamedev.ru/community/mmorpg/articles/?id=1
тут про WSAEvent технологию

на Completion Port скоро выложу дижок

#24
19:33, 24 июля 2007

http://www.gamedev.ru/community/mmorpg/articles/?id=6

#25
20:39, 3 ноя. 2007

int accept (int s, struct sockaddr * addr, int * addrlen);
в статье.

у меня

accept (s, (struct sockaddr *)&addra, sizeof(struct sockaddr_in));
Ошибки:
/home/mike_nerevarin/tcpip/src/tcpip.cpp:43: error: invalid conversion from ‘unsigned int’ to ‘socklen_t*’
/home/mike_nerevarin/tcpip/src/tcpip.cpp:43: error: initializing argument 3 of ‘int accept(int, sockaddr*, socklen_t*)’

Почему?.. Догадываюсь, что я неправильно передал второй параметр - как правильно?..

Тот же вопрос по отношению к connect и bind

#26
23:18, 3 ноя. 2007

Mike Nerevarin
Видимо так
int size = sizeof(struct sockaddr_in);
accept (s, (struct sockaddr *)&addra, (socklen_t*)&size);

ЗЫ В линуксах всегда такие интересные извраты..

#27
23:59, 3 ноя. 2007

Работает, спс. А в connect  и bind тип принимаемой длины другой, что странно, вроде бы длина одного и того же...

#28
15:07, 7 ноя. 2007

Интересные извраты в линуксе продолжаются....
"сервер"
using namespace std;
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 15000


int main ()
{
struct sockaddr_in addr;
memset (&addr, 0, sizeof (struct sockaddr_in));
addr.sin_family = AF_INET;
addr.sin_port = htons (PORT);
addr.sin_addr.s_addr = inet_addr ("127.0.0.1");
  int s = socket (PF_INET, SOCK_STREAM, 0);
  if (s == -1){
    cout << "Не работает";
    perror ("socket");
  }
  cout << "Работает\n";
int serror = bind (s, (struct sockaddr *)&addr , sizeof (struct sockaddr_in));
listen (s, 5);
struct sockaddr_in addra;
int news = accept (s, (struct sockaddr *)&addra, (socklen_t*)sizeof(struct sockaddr_in));
if (news= -1) cout << "Не приняли!";
return 0;}


"Клиент"

using namespace std;
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 15000

int main ()
{
struct sockaddr_in addr;
memset (&addr, 0, sizeof (struct sockaddr_in));
addr.sin_family = AF_INET;
addr.sin_port = htons (PORT);
addr.sin_addr.s_addr = inet_addr ("127.0.0.1");
  int sd = socket (PF_INET, SOCK_STREAM, 0);
  if (sd == -1){
    cout << "Не работает";
    perror ("socket");
  }
  cout << "Клиент работает\n";
int error = connect (sd, (struct sockaddr *) &addr, sizeof (struct sockaddr_in));
if (error=0) cout <<"Работает";
  return 0;}


"сервер" возвращает "Не приняли". Видимо, где-то что-то не так с адресами/портами и т.п. Кто-нить может помочь разобраться бедному красноглазому сценаристу?=)

#29
19:33, 8 ноя. 2007

Mike Nerevarin
Ошибка классическая :)
Медитируй над этим if (news= -1) и этим if (error=0)

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумСеть

Тема в архиве.