Ho appena iniziato a conoscere la programmazione dei socket e ho imparato a conoscere la winsock e ho raggiunto dei progressi. la mia domanda è fondamentalmente: voglio inviare e-mail, cosa devo fare?Invio di e-mail tramite C
punti da menzionare:
- ho imparato a conoscere l'inizializzazione di Winsock. Porta SMTP (25). creazione e connessione a socket con successo. Cosa dovrei fare ora?!!! (Sono bloccato qui)
- Non voglio un codice pronto per il lavoro. Voglio imparare. Quindi, sono necessari tutti i libri, le documentazioni, i tutorial o gli articoli consigliati.
- So che C non sa nulla di networking, vuol dire che devo scaricare alcune librerie? (Sto usando VS2010, Windows 7)
Ecco i link alle pagine che ho letto finora:
guida Winsock di base: http://msdn.microsoft.com/en-us/library/windows/desktop/ms737629(v=vs.85).aspx
Ho letto le prime 14 pagine di guida beej (non può postare il link, i nuovi utenti possono inviare un massimo di due collegamenti ipertestuali)
ho imparato a conoscere i tipi (WSADATA
, addrinfo structure
, sockaddr
, SOCKET
) e funzioni (WSAStartup()
, WSACleanup()
, getaddrinfo()
, Shutdown()
, WSAGetLastError()
, socket()
, ...)
e ho appena iniziato a leggere questo articolo su SMTP
http://www.faqs.org/rfcs/rfc821.html
ecco quello che ho scritto fino ad ora:
#include <stdio.h>
#include <WinSock2.h>
#include <WS2tcpip.h>
#pragma comment(lib, "Ws2_32.lib") // Applications that use Winsock must be linked with the Ws2_32.lib library file.
#define HTTP_PORT "80"
#define SMTP_PORT "25"
#define HOSTNAME_PORT "101"
/*
All ports and web services names (which are string aliases of the ports
can be found here:
%WINDIR%\system32\drivers\etc\services
*/
int main(void)
{
WSADATA wsdata;
int iresult, retval; //iresult : instant result
SOCKET connect_socket;
struct addrinfo *result, *ptr, hints;
iresult = WSAStartup(MAKEWORD(2, 2), &wsdata);
if(iresult != 0) printf("Initiation of Winsock succeeded.\n");
else
{
printf("WinSock initialization failed..\n");
WSACleanup();
return 0;
}
if(LOBYTE(wsdata.wVersion) == 2 && HIBYTE(wsdata.wVersion) == 2) printf("winsock.dll is found.\n");
else
{
printf("Can not find the required winsock.dll file.\n");
WSACleanup();
return 0;
}
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_UNSPEC; // IPv4 or IPv6
hints.ai_protocol = IPPROTO_TCP; // TCP connection (full duplex)
hints.ai_socktype = SOCK_STREAM; // Provides sequenced, reliable, two-way, connection-based byte streams
connect_socket = socket(hints.ai_family, hints.ai_socktype, hints.ai_protocol);
if(connect_socket == INVALID_SOCKET)
{
printf("Socket Creation failed..\n");
WSACleanup();
return 0;
}
else printf("Socket Creation Succeeded ..\n");
WSACleanup();
return 1;
}
am fuori rotta?
Mi raccomando di leggere Stevens' eccellente libro "TCP/IP Illustrated", e anche la sua "Avanzate Programmazione nell'ambiente Unix ". Sì, lo so che dice Unix, ma è davvero un libro eccellente e 'winsock' è fondamentalmente un'implementazione dell'API socket BSD. – cha0site