daflowjoe
Mitglied
Hi Leute,
versuche gerade mit c++ eine WSA Connection zu einem SMTP Provider aufzubauen und so eine Mail zu schicken. Über Putti funktioniert alles wunderbar. Über meine Console aber nicht. Es bleibt beim read einfach hängen bzw. es kommt einfach keine Antwort vom Server, was aber nicht sein kann. Ich kann dieses Verhalten einfach nicht nachvollziehen. oO
Kann mir jemand auf die Sprünge helfen? Ich denke bei mir haberts da irgendwo grad am grundsätzlichen Verständnis.
versuche gerade mit c++ eine WSA Connection zu einem SMTP Provider aufzubauen und so eine Mail zu schicken. Über Putti funktioniert alles wunderbar. Über meine Console aber nicht. Es bleibt beim read einfach hängen bzw. es kommt einfach keine Antwort vom Server, was aber nicht sein kann. Ich kann dieses Verhalten einfach nicht nachvollziehen. oO
Kann mir jemand auf die Sprünge helfen? Ich denke bei mir haberts da irgendwo grad am grundsätzlichen Verständnis.
Code:
// winsock tut.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <winsock2.h>
#pragma comment( lib, "ws2_32.lib" )
using namespace std;
int startWinsock()
{
//Initialsierung der WSA Startup WSA-Win Socket Api
WSADATA wsa;
return WSAStartup(MAKEWORD(2,0), &wsa);
}
bool readable(SOCKET socket)
{
FD_SET fdSet;
TIMEVAL timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 0;
long status;
FD_ZERO(&fdSet);
FD_SET(socket,&fdSet);
status = select(0,&fdSet,0,0,&timeout);
if(status <= 0)
{
FD_ZERO(&fdSet);
}
if(!FD_ISSET(socket,&fdSet))
{
return false;
}
return true;
}
int _tmain(int argc, _TCHAR* argv[])
{
long rc;
SOCKET s;
SOCKADDR_IN addr;
char buf[256];
char buf2[256];
rc = startWinsock();
if(rc!=0)
{
cout << "Es ist ein Fehler beim Initialsieren der Windowsocket aufgetreten" << endl;
return 1;
}
else
{
printf("Winsocket started!\n");
}
//Socket erstellen
s = socket(AF_INET, SOCK_STREAM, 0);
if(s == INVALID_SOCKET)
{
cout << "Error: Could not create socket, error: " << WSAGetLastError() << endl;
return 1;
}
else
{
cout << "Socket creating successfull!" << endl;
}
// Alles auf 0 setzen, inklsuive sin_zero
memset(&addr, 0, sizeof(SOCKADDR_IN));
addr.sin_family = AF_INET;
addr.sin_port = htons(25); // Legt Portnummer fest, htons wandelt Short in Network byte um
addr.sin_addr.s_addr = inet_addr("195.4.92.212");
//Socketverbindung aufbauen
rc = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR));
if( rc == SOCKET_ERROR)
{
cout << "Connection to socket failed." << WSAGetLastError() << endl;
return 1;
}
else
{
cout << "Verbunden mit SMTP Freenet - Port 25... " << endl;
}
// Daten austauschen
int ok = 1;
while(rc!=SOCKET_ERROR)
{
printf("\nZeichenfolge eingeben [max 256]: ");
gets(buf);
send(s,buf,strlen(buf),0);
rc=recv(s,buf,256,0); //>>>>>>>>>>>>>>> Hier die Stelle wo es hängt <<<<<<<<<<
if(rc==0)
{
printf("Server hat die Verbindung getrennt..\n");
break;
}
if(rc==SOCKET_ERROR)
{
printf("Fehler: recv, fehler code: %d\n",WSAGetLastError());
break;
}
buf[rc]='\0';
printf("\nServer antwortet: %s\n",buf);
}
closesocket(s);
WSACleanup();
return 0;
}