diff options
| author | crupest <crupest@outlook.com> | 2021-06-06 23:43:52 +0800 | 
|---|---|---|
| committer | crupest <crupest@outlook.com> | 2021-06-06 23:43:52 +0800 | 
| commit | 7a269e185fc59e5f81e7c91e6e75891ba2ca4b3b (patch) | |
| tree | 8a0baf8e5eac69003770306e7968c1196a5a49dd /works/life/computer-network-experiment | |
| parent | fcd2304e04dd3fabdefce4293b1b76ad99f8ed73 (diff) | |
| download | crupest-7a269e185fc59e5f81e7c91e6e75891ba2ca4b3b.tar.gz crupest-7a269e185fc59e5f81e7c91e6e75891ba2ca4b3b.tar.bz2 crupest-7a269e185fc59e5f81e7c91e6e75891ba2ca4b3b.zip  | |
import(life): ...
Diffstat (limited to 'works/life/computer-network-experiment')
| -rw-r--r-- | works/life/computer-network-experiment/Common.cpp | 13 | ||||
| -rw-r--r-- | works/life/computer-network-experiment/Common.h | 8 | ||||
| -rw-r--r-- | works/life/computer-network-experiment/client.cpp | 11 | ||||
| -rw-r--r-- | works/life/computer-network-experiment/server.cpp | 23 | 
4 files changed, 40 insertions, 15 deletions
diff --git a/works/life/computer-network-experiment/Common.cpp b/works/life/computer-network-experiment/Common.cpp index 2e01dcb..59c2f0f 100644 --- a/works/life/computer-network-experiment/Common.cpp +++ b/works/life/computer-network-experiment/Common.cpp @@ -5,6 +5,11 @@  #ifdef WIN32
  #include <Windows.h>
  #include <winsock.h>
 +#else
 +#include <arpa/inet.h>
 +#include <netinet/in.h>
 +#include <sys/socket.h>
 +#include <sys/unistd.h>
  #endif
  [[noreturn]] void PrintErrorMessageAndExit(StringView message,
 @@ -46,6 +51,14 @@ void InitWSA() {  }
  #endif
 +int Close(int socket) {
 +#ifdef WIN32
 +  return closesocket(socket);
 +#else
 +  return close(socket);
 +#endif
 +}
 +
  int main() {
  #ifdef WIN32
    InitWSA();
 diff --git a/works/life/computer-network-experiment/Common.h b/works/life/computer-network-experiment/Common.h index 45a7da1..4e30439 100644 --- a/works/life/computer-network-experiment/Common.h +++ b/works/life/computer-network-experiment/Common.h @@ -14,8 +14,6 @@ inline auto &output_stream = std::wcout;  inline auto &error_stream = std::wcerr;
  #define CRUT(string_literal) L##string_literal
 -int Main();
 -
  inline String ConvertCharString(std::string_view s) {
    return cru::ToUtf16WString(s);
  }
 @@ -28,12 +26,16 @@ inline auto &output_stream = std::cout;  inline auto &error_stream = std::cerr;
  #define CRUT(string_literal) string_literal
 -inline String ConvertCharString(std::string_view s) { return s; }
 +inline String ConvertCharString(std::string_view s) { return String(s); }
  #endif
 +int Main();
 +
  [[noreturn]] void PrintErrorMessageAndExit(StringView message,
                                             bool print_last_error = true);
  #ifdef WIN32
  void InitWSA();
  #endif
 +
 +int Close(int socket);
 diff --git a/works/life/computer-network-experiment/client.cpp b/works/life/computer-network-experiment/client.cpp index aeb352f..f209171 100644 --- a/works/life/computer-network-experiment/client.cpp +++ b/works/life/computer-network-experiment/client.cpp @@ -8,6 +8,11 @@  #ifdef WIN32
  #include <Windows.h>
  #include <winsock.h>
 +#else
 +#include <arpa/inet.h>
 +#include <netinet/in.h>
 +#include <sys/socket.h>
 +
  #endif
  const auto connect_address = "127.0.0.1"; // control connect address
 @@ -16,7 +21,7 @@ const u_short port = 1234;                // control connect port  int Main() {
    int client_socket;
 -  if ((client_socket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
 +  if ((client_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
      PrintErrorMessageAndExit(CRUT("Failed to create socket!\n"));
    }
 @@ -28,7 +33,7 @@ int Main() {    memset(&(server_address.sin_zero), 0, sizeof(server_address.sin_zero));
    if (connect(client_socket, (sockaddr *)&server_address, sizeof(sockaddr)) ==
 -      SOCKET_ERROR) {
 +      -1) {
      PrintErrorMessageAndExit(CRUT("Failed to connect!"));
    }
 @@ -45,6 +50,6 @@ int Main() {    SendOutput(CRUT("Received message:\n"));
 -  closesocket(client_socket);
 +  Close(client_socket);
    return 0;
  }
 diff --git a/works/life/computer-network-experiment/server.cpp b/works/life/computer-network-experiment/server.cpp index 9cf655a..ff03783 100644 --- a/works/life/computer-network-experiment/server.cpp +++ b/works/life/computer-network-experiment/server.cpp @@ -11,6 +11,11 @@  #ifdef WIN32
  #include <Windows.h>
  #include <winsock.h>
 +#else
 +#include <arpa/inet.h>
 +#include <netinet/in.h>
 +#include <sys/socket.h>
 +
  #endif
  const auto bind_address = "127.0.0.1"; // control bind address
 @@ -35,9 +40,9 @@ void ResponseThreadProc(int socket, sockaddr_in address) {                                     buffer.size() - byte_count_sent, 0);
      // send failed
 -    if (byte_actually_sent == SOCKET_ERROR) {
 -      std::cerr << "Failed to send!\n";
 -      closesocket(socket);
 +    if (byte_actually_sent == -1) {
 +      SendOutput(OutputType::Error, CRUT("Failed to send!\n"));
 +      Close(socket);
        break;
      }
 @@ -47,13 +52,13 @@ void ResponseThreadProc(int socket, sockaddr_in address) {    SendOutput(CRUT("Succeeded to send message to {} !\n"),
               ConvertCharString(address_string));
 -  closesocket(socket);
 +  Close(socket);
  }
  int Main() {
    int server_socket;
 -  if ((server_socket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
 +  if ((server_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
      PrintErrorMessageAndExit(CRUT("Failed to create socket."));
    }
 @@ -65,23 +70,23 @@ int Main() {    memset(&(server_address.sin_zero), 0, sizeof(server_address.sin_zero));
    if (bind(server_socket, reinterpret_cast<sockaddr *>(&server_address),
 -           sizeof(sockaddr_in)) == SOCKET_ERROR) {
 +           sizeof(sockaddr_in)) == -1) {
      PrintErrorMessageAndExit(CRUT("Failed to bind."));
    }
 -  if (listen(server_socket, SOMAXCONN) == SOCKET_ERROR) {
 +  if (listen(server_socket, SOMAXCONN) == -1) {
      PrintErrorMessageAndExit(CRUT("Failed to listen."));
    }
    while (true) {
      sockaddr_in client_address;
      int client_socket;
 -    int sin_size = sizeof(sockaddr_in);
 +    unsigned sin_size = sizeof(sockaddr_in);
      client_socket =
          accept(server_socket, reinterpret_cast<sockaddr *>(&client_address),
                 &sin_size);
 -    if (client_socket == INVALID_SOCKET) {
 +    if (client_socket == -1) {
        PrintErrorMessageAndExit(CRUT("Failed to accecpt"));
      }
  | 
