Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah fungsi C++ mengendalikan tamat masa dan pengecualian dalam pengaturcaraan rangkaian?

Bagaimanakah fungsi C++ mengendalikan tamat masa dan pengecualian dalam pengaturcaraan rangkaian?

王林
Lepaskan: 2024-04-26 15:36:01
asal
1025 orang telah melayarinya

Dalam pengaturcaraan rangkaian C++, gunakan perpustakaan chrono untuk menetapkan tamat masa semasa memproses tamat masa, seperti menetapkan tamat masa 10 saat: std::chrono::saat tamat masa = 10s;. Gunakan pernyataan cuba-tangkap untuk mengendalikan pengecualian, seperti: cuba { ... } tangkap (const std::exception& e) { ... }.

C++ 函数在网络编程中如何处理超时和异常?

Cara fungsi C++ mengendalikan tamat masa dan pengecualian dalam pengaturcaraan rangkaian

Dalam pengaturcaraan rangkaian, tamat masa dan pengecualian adalah cabaran biasa. C++ menyediakan fungsi berkuasa untuk mengendalikan situasi ini, dan artikel ini akan meneroka cara menggunakannya dengan berkesan.

Mengendalikan tamat masa

C++ menyediakan perpustakaan chrono untuk mengurus masa. Untuk menetapkan tamat masa, anda boleh menggunakan fungsi berikut: chrono 库来管理时间。要设置一个超时,可以使用以下函数:

#include <chrono>

using namespace std::chrono_literals;

std::chrono::seconds timeout = 10s; // 设置 10 秒的超时
Salin selepas log masuk

实战案例:使用 select() 函数实现超时

select() 函数在特定时间段内等待一个或多个文件描述符的可读性。它可以与超时一起使用:

#include <sys/select.h>

int main() {
  // 设置文件描述符集合
  fd_set fds;
  FD_ZERO(&fds);
  FD_SET(socket_fd, &fds);

  // 设置超时
  struct timeval timeout;
  timeout.tv_sec = 10;
  timeout.tv_usec = 0;

  // 等待可读性或超时
  int result = select(socket_fd + 1, &fds, NULL, NULL, &timeout);

  if (result == 0) {
    // 超时
    std::cout << "Operation timed out." << std::endl;
  } else if (result > 0) {
    // 文件描述符可读
    // ...
  } else {
    // 错误
    std::cout << "An error occurred." << std::endl;
  }

  return 0;
}
Salin selepas log masuk

处理异常

C++ 使用异常来处理异常情况。当抛出一个异常时,它会导致当前函数的立即终止并将控制权传递给其调用者。要捕获异常,可以在代码块周围使用 try-catch 语句:

#include <stdexcept>

try {
  // ...
} catch (const std::exception& e) {
  // 异常处理
  std::cout << "An exception occurred: " << e.what() << std::endl;
}
Salin selepas log masuk

实战案例:在网络连接中处理 std::runtime_error 异常

std::runtime_error

#include <iostream>

using namespace std;

int main() {
  try {
    // 建立网络连接
    // ...
  } catch (const std::runtime_error& e) {
    // 连接失败
    cout << "Connection failed: " << e.what() << endl;
  }

  return 0;
}
Salin selepas log masuk

Kes praktikal: Gunakan fungsi select() untuk melaksanakan tamat masa

🎜🎜select() fungsi dalam tempoh masa tertentu Menunggu kebolehbacaan satu atau lebih deskriptor fail. Ia boleh digunakan dengan tamat masa: 🎜rrreee🎜🎜Mengendalikan pengecualian🎜🎜🎜C++ menggunakan pengecualian untuk mengendalikan situasi luar biasa. Apabila pengecualian dilemparkan, ia menyebabkan penamatan serta-merta fungsi semasa dan memindahkan kawalan kepada pemanggilnya. Untuk menangkap pengecualian, anda boleh menggunakan pernyataan try-catch di sekitar blok kod: 🎜rrreee🎜🎜Contoh praktikal: Mengendalikan pengecualian std::runtime_error dalam sambungan rangkaian🎜🎜🎜std::runtime_error ialah pengecualian yang biasa digunakan untuk mewakili ralat masa jalan. Ia boleh membuang apabila sambungan rangkaian gagal: 🎜rrreee🎜 Pengendalian tamat masa dan pengecualian yang cekap adalah penting untuk aplikasi rangkaian yang mantap dan boleh dipercayai. C++ menyediakan fungsi berkuasa yang membolehkan anda mengurus situasi ini dengan mudah dan memastikan kod anda masih berfungsi dengan betul apabila timbul masalah yang tidak dijangka. 🎜

Atas ialah kandungan terperinci Bagaimanakah fungsi C++ mengendalikan tamat masa dan pengecualian dalam pengaturcaraan rangkaian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan