Tôi vừa bắt đầu tìm hiểu về lập trình socket và tìm hiểu về winsock và đạt được một số tiến bộ. câu hỏi của tôi về cơ bản là: Tôi muốn gửi email, tôi phải làm gì?Gửi email bằng C
điểm được đề cập:
- tôi đã học về khởi winsock. Cổng SMTP (25). tạo và kết nối với ổ cắm thành công. Tôi nên làm gì bây giờ?!!! (Tôi bị kẹt ở đây)
- Tôi không muốn mã sẵn sàng cho công việc. Tôi muốn học. Vì vậy, bất kỳ sách, tài liệu, hướng dẫn hoặc đề xuất bài viết là cần thiết.
- Tôi biết rằng C chính nó không biết gì về mạng, điều đó có nghĩa là tôi phải tải xuống một số thư viện? (Tôi đang sử dụng VS2010, Windows 7)
Dưới đây là các liên kết đến các trang Tôi đã đọc cho đến nay:
dẫn winsock cơ bản: http://msdn.microsoft.com/en-us/library/windows/desktop/ms737629(v=vs.85).aspx
Tôi đã đọc 14 trang đầu từ beej dẫn (không thể gửi liên kết, người dùng mới chỉ có thể đăng tối đa là hai siêu liên kết)
tôi đã học về các loại (WSADATA
, addrinfo structure
, sockaddr
, SOCKET
) và chức năng (WSAStartup()
, WSACleanup()
, getaddrinfo()
, Shutdown()
, WSAGetLastError()
, socket()
...)
và tôi đã chỉ mới bắt đầu đọc bài viết này về SMTP
http://www.faqs.org/rfcs/rfc821.html
đây là những gì tôi đã viết cho đến bây giờ:
#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 Tôi tắt khóa học?
tôi khuyên bạn nên đọc tuyệt vời Stevens' TCP/IP Illustrated "cuốn sách, và cũng có thể của mình "Nâng cao Lập trình trong môi trường Unix ". Có, tôi biết nó nói Unix, nhưng nó thực sự là một cuốn sách tuyệt vời và 'winsock' về cơ bản là một thực hiện của API socket BSD. – cha0site