Показать сообщение отдельно

  #5  
Старый 06.08.2009, 21:58
agrofyl2
Познающий
Регистрация: 25.04.2008
Сообщений: 51
С нами: 9497102

Репутация: 17
По умолчанию

Итак, все получилось.
У меня уже была написана команда, по которой клиент коннектится к опр. IP. И я получаю его IP как говорил __mad:

Код:
#include "iostream"
using namespace std;

#include <winsock2.h>
#pragma comment( lib, "ws2_32.lib" )

int port=2121;

int main() {
	cout << "Work" << endl;
	WSADATA wsd;
	if (WSAStartup(MAKEWORD(2,2), &wsd) != 0) {
		cout << "WSAData initialize error" << endl;
		return 0;
	}
	
	SOCKET sClient, sServer;
    struct sockaddr_in localaddr, clientaddr;
    int iSize;

	sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
   
	if (sServer == SOCKET_ERROR)
    {
		cout << "Soket error" << endl;
        return 0;
    }
    localaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    localaddr.sin_family = AF_INET;
    localaddr.sin_port = htons(port);

    if (bind(sServer, (struct sockaddr *)&localaddr, sizeof(localaddr)) == SOCKET_ERROR)
    {
		cout << "Can't bind" << endl;
        return 1;
    }
    
    cout << "Bind OK" << endl;

    listen(sServer, 4);

    cout << "Listen OK" << endl;
	
	while(1) {
        iSize = sizeof(clientaddr);
        sClient = accept(sServer, (struct sockaddr *)&clientaddr, &iSize);
		if (sClient == INVALID_SOCKET)
        {        
			cout << "Accept filed" << endl;
            break;
        }
		cout << "Accept OK" << endl;
		cout << "Client IP: " << inet_ntoa(clientaddr.sin_addr) << endl;
                        //return 0;
	}
    closesocket(sServer);
	cout << "End" << endl;
	WSACleanup();
    return 0;
}
Еще не тестил(только локалхост), но думаю работает.
__mad'у спасибо!!! и вообще всем кто ответил
 
Ответить с цитированием