//#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
void ShowError()
{
TCHAR* lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER| //自动分配消息缓冲区
FORMAT_MESSAGE_FROM_SYSTEM, //从系统获取信息
NULL,GetLastError(), //获取错误信息标识
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),//使用系统缺省语言
(LPTSTR)&lpMsgBuf, //消息缓冲区
0,
NULL);
MessageBox(NULL,lpMsgBuf,"",MB_ICONERROR);
}
void main()
{
WSADATA wsaData;
//初始化Socket 库
if(WSAStartup(MAKEWORD(2,0),&wsaData)) return;
//创建一根电线
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
SOCKADDR_IN sa;
sa.sin_family=AF_INET;
//设置电线连接服务器端的端口
sa.sin_port = htons(IPPORT_SMTP);
//123.125.50.133 是ping smtp.163.com 出来的,后面会讲使用gethostbyname
//来直接从
//主机名得到ip 地址
/* 结构指针 */
HOSTENT *host_entry;
/* 网址: http://www.google.cn/ */
char host_name[256] ="smtp.163.com";
char host_addr[256];
/* 即要解析的域名或主机名 */
host_entry=gethostbyname(host_name);
printf("%s\n", host_name);
if(host_entry!=0)
{
sprintf(host_addr,"%d.%d.%d.%d",
(host_entry->h_addr_list[0][0]&0x00ff),
(host_entry->h_addr_list[0][1]&0x00ff),
(host_entry->h_addr_list[0][2]&0x00ff),
(host_entry->h_addr_list[0][3]&0x00ff));
printf("解析IP地址: %s\n",host_addr);
}
sa.sin_addr.S_un.S_addr = inet_addr(host_addr);
//为什么不用设置客户端的端口,难道不需要客户端的端口吗?
if(connect(sock,(SOCKADDR *)&sa,sizeof(sa))==SOCKET_ERROR)
{
ShowError();
return;
}
//(4)一上来人家就主动和你唠嗑:
char buffer[256];
ZeroMemory(buffer,sizeof(buffer)/sizeof(char));
//接收问候语
recv(sock,buffer,256,0);
printf(buffer);
//(5)朋友再见
//注意不能忘了末尾的回车
TCHAR cQuit[] = "QUIT\n";
send(sock,cQuit,lstrlen(cQuit),0);
ZeroMemory(buffer,sizeof(buffer)/sizeof(char));
//接收GoodBye
recv(sock,buffer,256,0);
printf(buffer);
//做事情。把大象放冰箱总共分几步
closesocket(sock);
WSACleanup();
}
hello163
最新推荐文章于 2024-04-17 22:35:25 发布