สอบถาม การเขียน C++ บนแพลตฟอร์มวินโดว์ ติดตรง #include <netdb.h> ใช้อะไรแทนดีครับ

ตอนนี้ผมกำลังเขียน C++ บนแพลตฟอร์มวินโดว์
โดยใช้ Dev C++ เขียน (หรือ Code::block เขียนก็ได้)

หัวข้อหลักคือ  ต้องการให้มันส่งอีเมลล์ได้ครับ
พอดีผมไปเช็คใน stackOverflow มาครับ ปรากฏว่าcode บน base on linux ทั้งนั้นเลย
ตัวอย่างโค๊ด
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้

พอเวลาเราเขียนออกมา  มันจะติดตรง
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
ครับ   พอไปเช็คมา  ก็พบว่าต้องเขียนบนลินุคเท่านั้น (ไฟลล์ที่คอมไพล์จากลินุคก็ไม่ใช่ exe อีก)
ซึ่งผมก็ใช้ #include <winsock.h>  แทนได้แค่สองตัวบน  ขาด #include <netdb.h>   ที่หาอะไรมาแทนไม่ได้ครับ


ผมจึงขอความช่วยเหลือตามนี้ครับ
1.มีheader  อะไรที่แทน#include <netdb.h>  ได้บ้างครับ
2.มีตัวอย่างอื่นที่เป็นC++ พิมพ์ข้อความในcmd แล้วสามารถส่งอีเมลล์ได้มั้ยครับ

ขอบคุณครับ
คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 3
socket programming บน windows กับ unix/linux ไม่เหมือนกันซะทีเดียว ต้องแก้โปรแกรมบ้างครับ


- เปลี่ยน include file จาก
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
เป็น
#include <winsock2.h>


- เติม WSAStartup() ก่อนใช้งาน และ WSACleanup() หลังเลิกใช้
WSADATA wsaData;
int err;
err = WSAStartup(MAKEWORD(2,2),&wsaData);
if (err != 0) {
   printf("WSAStartup failed with error: %d\n", err);
   return -1;
}

...

WSACleanup();


- socket ไม่ใช่ int แต่เป็น SOCKET ต้องเปลี่ยน
int sock;
เป็น
SOCKET sock;


- socket() ไม่ได้ return error เป็น -1 แต่เป็น INVALID_SOCKET ต้องเปลี่ยน
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock==-1)
{
   perror("opening stream socket");
   exit(1);
}
เป็น
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock==INVALID_SOCKET)
{
   perror("opening stream socket");
   exit(1);
}


- connect() ไม่ได้ return error เป็น -1 แต่เป็น SOCKET_ERROR ต้องเปลี่ยน
if (connect(sock, (struct sockaddr *) &server, sizeof server)==-1)
{
   perror("connecting stream socket");
   exit(1);
}
เป็น
if (connect(sock, (struct sockaddr *) &server, sizeof server)==SOCKET_ERROR)
{
   perror("connecting stream socket");
   exit(1);
}


- read(), write(), close() ใช้กับ socket ไม่ได้ ต้องเปลี่ยนเป็น recv(), send() และเพิ่ม 0 เป็น parameter ตัวสุดท้าย ส่วน close() เปลี่ยนเป็น closesocket()
write(sock,s,strlen(s));
write(1,s,strlen(s));
...
len = read(sock,buf,BUFSIZ);
write(1,buf,len);
...
close(sock);
เป็น
send(sock,s,strlen(s),0);
write(1,s,strlen(s));
...
len = recv(sock,buf,BUFSIZ,0);
write(1,buf,len);
...
closesocket(sock);


- เพิ่ม library ws2_32.lib เข้าไปในโปรเจคด้วย


ยังมีอื่นๆอีก ยังไงก็ลองดูที่นี่นะครับ
http://msdn.microsoft.com/en-us/library/windows/desktop/ms742213%28v=vs.85%29.aspx


;>)
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่