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 | |
parent | fcd2304e04dd3fabdefce4293b1b76ad99f8ed73 (diff) | |
download | crupest-7a269e185fc59e5f81e7c91e6e75891ba2ca4b3b.tar.gz crupest-7a269e185fc59e5f81e7c91e6e75891ba2ca4b3b.tar.bz2 crupest-7a269e185fc59e5f81e7c91e6e75891ba2ca4b3b.zip |
import(life): ...
Diffstat (limited to 'works/life')
-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"));
}
|