powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пишу свой сервер. Как узнать что клиент отключился от сервера ? Сервер одноклиентный.
9 сообщений из 9, страница 1 из 1
Пишу свой сервер. Как узнать что клиент отключился от сервера ? Сервер одноклиентный.
    #38544128
gera3323
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
пример кода 
//FILE - CNet.cpp

#include "CNet.h"

 CNet::CNet()
 {
	 WSADATA wd;

	 memset( &wd, 0, sizeof(wd) );

	 if( SUCCEEDED( WSAStartup(MAKEWORD(2,2), &wd )) ) 
	 {
		 m_bBadSocket        = false;
		 m_bBadAuthorization = false;
		 m_iLenMsg           = 0;
	 }

	 if( !m_bBadSocket )
		 StartingServer();
	 else 
		 WSACleanup();
 }

 void CNet::AbortServer()
 {
	 /*Message*/
	 closesocket(m_sListen);
	 WSACleanup();
 }

 void CNet::StartingServer()
 {
	 sockaddr_in SockServer;

	 memset( &SockServer, 0, sizeof(sockaddr_in) );

	 SockServer.sin_family      = AF_INET;
	 SockServer.sin_port        = htons(FTP_PORT);
	 SockServer.sin_addr.s_addr = htonl(INADDR_ANY);

	 m_sListen = socket( AF_INET, 
		                 SOCK_STREAM, IPPROTO_TCP );

	 if( FAILED( m_sListen ) ) 
		 m_bBadSocket = true;

	 if( FAILED( bind( m_sListen, reinterpret_cast<sockaddr*>(&SockServer), sizeof(sockaddr_in))) )
		 m_bBadSocket = true;

	 if( FAILED( listen( m_sListen , 1 )) )
		 m_bBadSocket = true;

	 if( m_bBadSocket )
		 AbortServer();	 

		for( ;; ) {
			m_sLink = accept( m_sListen, NULL, NULL );

			
		}
		
	 shutdown( m_sListen, 2 );
	 closesocket( m_sListen );
	 WSACleanup();
 }
 

//FILE - CNet.h

#include <WinSock.h>
#include "CEncode.h"

	using namespace std;

#pragma comment(lib,"ws2_32.lib")


#define USER_DEFAULT_LOGIN		"gera"
#define USER_DEFAULT_PASSWORD   "gera"

#define REQUEST_AUTHORIZATION   "PE_AUTO"                  /* Запрос на авторизацию  */
#define REQUEST_SUCCESS			"YS_AUTO"                  /* Авторизация успешна    */
#define REQUEST_FAILED          "YF_AUTO"				   /* Авторизация неуспешна  */
#define REQUEST_AUTH_ERROR      "FQ_USER"                  /* Отказано в доступе     */

#define HELLO_TRAVELING			"HI TRAVELING\n"	       /* Строка приветствия     */

#define FTP_PORT                21

class CNet : public CEncode
{

	SOCKET m_sLink;
	SOCKET m_sListen;

	bool   m_bBadSocket;
	bool   m_bBadAuthorization;

	int    m_iLenMsg;

	void StartingServer();
	void AbortServer();

	public:
		CNet();
};
...
Рейтинг: 0 / 0
Пишу свой сервер. Как узнать что клиент отключился от сервера ? Сервер одноклиентный.
    #38544131
gera3323
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gera3323, и Грамотно ли написан это код ?

что тут подкоректировать.
...
Рейтинг: 0 / 0
Пишу свой сервер. Как узнать что клиент отключился от сервера ? Сервер одноклиентный.
    #38544149
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gera3323и Грамотно ли написан это код ?
Ну, от примера из MSDN никто особо грамотности не ожидает, не для того они пишутся...

По сабжу: если клиент отключился штатно, recv() сразу вернёт 0. Если нештатно - send()
вернёт ошибку при первой попытке что-то послать, recv() вернёт ошибку после срабатывания
механизма KEEP ALIVE если тот включён и настроен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пишу свой сервер. Как узнать что клиент отключился от сервера ? Сервер одноклиентный.
    #38544166
gera3323
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, спасибо сделал.
...
Рейтинг: 0 / 0
Пишу свой сервер. Как узнать что клиент отключился от сервера ? Сервер одноклиентный.
    #38544179
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gera3323,

на recv не помешает задание разумного таймаута
...
Рейтинг: 0 / 0
Пишу свой сервер. Как узнать что клиент отключился от сервера ? Сервер одноклиентный.
    #38544190
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилна recv не помешает задание разумного таймаута
Вот бы ещё WinSock его поддерживал...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пишу свой сервер. Как узнать что клиент отключился от сервера ? Сервер одноклиентный.
    #38544238
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВот бы ещё WinSock его поддерживал...
не так всё печально - setsockopt(,,SO_RCVTIMEO,,) для синхронного recv работает
...
Рейтинг: 0 / 0
Пишу свой сервер. Как узнать что клиент отключился от сервера ? Сервер одноклиентный.
    #38544246
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилsetsockopt(,,SO_RCVTIMEO,,) для синхронного recv работает
О, действительно, в свежей доке сказано, что работает во вторых сокетах. А я-то всё поезда
под откос...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пишу свой сервер. Как узнать что клиент отключился от сервера ? Сервер одноклиентный.
    #38544284
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на самом деле что Дима написал не совсем верно, потому что TCP это абстракция над нижними слоями сети, поэтому как оно там внутри будет себя вести - может быть по-разному.
появляться это будет как ошибки чтения и записи.
при больших keep alive физическое соединение может рваться и восстанавливаться несколько раз, а логическое - висеть и ждать.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пишу свой сервер. Как узнать что клиент отключился от сервера ? Сервер одноклиентный.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]