21xrx.com
2024-12-22 21:26:28 Sunday
登录
文章检索 我的文章 写文章
Visual C++网络编程案例实战
2023-07-13 09:31:16 深夜i     --     --
Visual C++ 网络编程 案例实战 TCP/IP socket编程

Visual C++是一款广泛使用的编程环境,它提供了丰富的编程工具和组件,支持开发多种类型的应用程序。其中,网络编程是Visual C++的重要应用之一。本文将介绍一些Visual C++网络编程案例实战,帮助读者更好地了解和使用Visual C++网络编程。

1.基础的Socket编程

Socket编程是网络编程的基础,也是最常用的一种网络编程方法。Visual C++提供了丰富的Socket编程接口和类库,可以很方便地实现网络通信功能。我们来看一下一个简单的Socket编程例子:


//Client端代码

#include <WinSock2.h>

#include <iostream>

using namespace std;

int main()

{

  //初始化Winsock库

  WSADATA wsaData;

  WSAStartup(MAKEWORD(2, 2), &wsaData);

  //创建Socket

  SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

  //连接服务器

  sockaddr_in serverAddr;

  serverAddr.sin_family = AF_INET;

  serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");

  serverAddr.sin_port = htons(8888);

  connect(clientSocket, (sockaddr*)& serverAddr, sizeof(serverAddr));

  //发送数据

  char sendData[1024] = "Hello, Server!";

  send(clientSocket, sendData, strlen(sendData) + 1, 0);

  //关闭Socket

  closesocket(clientSocket);

  WSACleanup();

  return 0;

}

//Server端代码

#include <WinSock2.h>

#include <iostream>

using namespace std;

int main()

{

  //初始化Winsock库

  WSADATA wsaData;

  WSAStartup(MAKEWORD(2, 2), &wsaData);

  //创建Socket

  SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

  //绑定地址及端口号

  sockaddr_in serverAddr;

  serverAddr.sin_family = AF_INET;

  serverAddr.sin_addr.s_addr = INADDR_ANY;

  serverAddr.sin_port = htons(8888);

  bind(serverSocket, (sockaddr*)& serverAddr, sizeof(serverAddr));

  //监听连接请求

  listen(serverSocket, 5);

  //接受客户端连接

  SOCKET clientSocket;

  sockaddr_in clientAddr;

  int clientAddrLen = sizeof(clientAddr);

  clientSocket = accept(serverSocket, (sockaddr*)& clientAddr, &clientAddrLen);

  //接收数据

  char recvData[1024] = {0};

  recv(clientSocket, recvData, 1024, 0);

  cout << "Recv Data: " << recvData << endl;

  //关闭Socket

  closesocket(clientSocket);

  closesocket(serverSocket);

  WSACleanup();

  return 0;

}

这个例子展示了客户端和服务器之间的简单通信过程。客户端向服务器发送一条消息,“Hello, Server!”,服务器接收这条消息并打印出来。

2.使用HTTP和FTP协议

HTTP和FTP协议是应用最广泛的网络协议之一。Visual C++同样提供了相应的类库,可以很容易地实现使用这些协议来进行网络通信。下面是一个使用HTTP协议实现GET请求的例子:


//使用HTTP协议实现GET请求

#include <WinInet.h>

#include <iostream>

using namespace std;

int main()

{

  HINTERNET hOpen = InternetOpenA("WinInet Test Program", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);

  HINTERNET hConnect = InternetConnectA(hOpen, "www.baidu.com", INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);

  HINTERNET hRequest = HttpOpenRequestA(hConnect, "GET", "/", NULL, NULL, NULL, 0, 1);

  HttpSendRequestA(hRequest, NULL, 0, NULL, 0);

  char buffer[1024] = {0};

  DWORD bufferSize;

  HttpQueryInfoA(hRequest, HTTP_QUERY_STATUS_CODE, buffer, &bufferSize, 0);

  cout << "HTTP Status Code: " << buffer << endl;

  HttpQueryInfoA(hRequest, HTTP_QUERY_CONTENT_TYPE, buffer, &bufferSize, 0);

  cout << "Content Type: " << buffer << endl;

  while (InternetReadFile(hRequest, buffer, sizeof(buffer)-1, &bufferSize) && bufferSize > 0)

  {

    buffer[bufferSize] = 0;

    cout << buffer;

  }

  InternetCloseHandle(hRequest);

  InternetCloseHandle(hConnect);

  InternetCloseHandle(hOpen);

  return 0;

}

这个例子展示了使用HTTP协议发送GET请求,并返回服务器的响应结果。

3.使用SMTP协议发送邮件

SMTP协议是发送邮件的主要协议之一,Visual C++也提供了相应的类库,可以方便地实现SMTP协议的邮件发送。下面是一个使用SMTP协议发送邮件的例子:


//使用SMTP协议发送邮件

#include <WinSock2.h>

#include <iostream>

using namespace std;

#define SMTPSERVER "smtp.163.com"

#define SMTPPORT 25

#define SMTPFROM "myemail@163.com"

#define SMTPPWD "mypassword"

int SendMail(SOCKET s, char* buf)

{

  char recvBuf[1024];

  int ret = recv(s, recvBuf, sizeof(recvBuf), 0);

  recvBuf[ret] = '\0';

  cout << recvBuf;

  ret = send(s, buf, strlen(buf), 0);

  cout << buf;

  ret = recv(s, recvBuf, sizeof(recvBuf), 0);

  recvBuf[ret] = '\0';

  cout << recvBuf;

  return ret;

}

int main()

{

  //初始化Winsock库

  WSADATA wsaData;

  WSAStartup(MAKEWORD(2, 2), &wsaData);

  //连接SMTP服务器

  SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

  sockaddr_in sockAddr;

  sockAddr.sin_family = AF_INET;

  sockAddr.sin_addr.s_addr = inet_addr(SMTPSERVER);

  sockAddr.sin_port = htons(SMTPPORT);

  connect(sock, (sockaddr*)& sockAddr, sizeof(sockAddr));

  //发送SMTP命令

  char buf[1024];

  SendMail(sock, "HELO smtp.163.com\r\n");

  sprintf_s(buf, "AUTH LOGIN\r\n");

  SendMail(sock, buf);

  sprintf_s(buf, "%s\r\n", SMTPFROM);

  SendMail(sock, buf);

  sprintf_s(buf, "%s\r\n", SMTPPWD);

  SendMail(sock, buf);

  sprintf_s(buf, "MAIL FROM:<%s>\r\n", SMTPFROM);

  SendMail(sock, buf);

  sprintf_s(buf, "RCPT TO:<recipient@163.com>\r\n");

  SendMail(sock, buf);

  sprintf_s(buf, "DATA\r\n");

  SendMail(sock, buf);

  sprintf_s(buf, "Subject: Test Mail\r\n"

    "To: <recipient@163.com>\r\n"

    "From: MyEmail<%s>\r\n\r\n"

    "Test Content Here!\r\n.\r\n", SMTPFROM);

  SendMail(sock, buf);

  sprintf_s(buf, "QUIT\r\n");

  SendMail(sock, buf);

  //关闭Socket

  closesocket(sock);

  WSACleanup();

  return 0;

}

这个例子展示了使用SMTP协议发送邮件的过程。程序需要连接SMTP服务器,通过发送SMTP命令,实现身份认证、发件人收件人设置、邮件内容设置等步骤。最终,成功发送一封测试邮件。

总结

本文简单介绍了Visual C++网络编程中基础的Socket编程、HTTP和FTP协议的应用和SMTP协议的邮件发送,这些网络编程技术都是非常实用的。网络编程技术是现代应用开发不可或缺的一部分,希望本文可以帮助读者更好地了解和使用Visual C++网络编程技术。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复