Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.84] |
|
Сообщ.
#1
,
|
|
|
После вызова accept не возвращается управление в программу. По крайней мере, не выводится на экран сообщение, следующее за вызовом этой функции. Почему?
// MyConsoleServer.cpp : Defines the entry point for the console application. // //#pragma comment (lib, "wsock32.lib") #include "stdafx.h" #include <conio.h> #include <winsock2.h> int _tmain(int argc, _TCHAR* argv[]) { WSADATA WsaData; SOCKET s,s1; SOCKADDR_IN sin,from; char *RecvBuffer; char *MsgText; int err,fromlen; MsgText = "<html><b>Hello!!</b></html>"; err = WSAStartup(0x0101,&WsaData); if(err == SOCKET_ERROR) { printf("WsaStartup() failed: %ld\n",GetLastError()); return 1; } s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); sin.sin_family = AF_INET; sin.sin_port = 3331; sin.sin_addr.s_addr = INADDR_ANY; err = bind(s,(LPSOCKADDR)&sin,sizeof(sin)); err = listen(s,SOMAXCONN); fromlen = sizeof(from); s1 = accept(s,(struct sockaddr*)&from,&fromlen); printf("accept connection from %s, port %d\n", inet_ntoa(from.sin_addr),htons(from.sin_port)); while(recv(s1,RecvBuffer,sizeof(RecvBuffer),0)!=SOCKET_ERROR) { printf("%c",RecvBuffer[0]); send(s1,MsgText,sizeof(MsgText),MSG_DONTROUTE); } return 0; } |
Сообщ.
#2
,
|
|
|
Ofer
Нувообщето accept нужно применять если есть входящее подключение, а если и нету ни одного а ты вызвал функцию вот она и забрала на себя управление и ждет входящего подключения Цитата Remarks This routine extracts the first connection on the queue of pending connections on s, creates a new socket and returns a handle to the new socket. The newly created socket has the same properties as s including asynchronous events registered with WSAAsyncSelect or with WSAEventSelect, but not including the listening socket's group ID, if any. If no pending connections are present on the queue, and the socket is not marked as nonblocking, accept blocks the caller until a connection is present. If the socket is marked nonblocking and no pending connections are present on the queue, accept returns an error as described below. The accepted socket cannot be used to accept more connections. The original socket remains open. |
Сообщ.
#3
,
|
|
|
sin.sin_port = 3331;
А где преобразование порта в сетевой порядок? htons()? |
Сообщ.
#4
,
|
|
|
Dem_max, все верно... Я не правильно понял справку.
Oleg2004, спасибо, учел |