cmake
cmake_minimum_required(VERSION 3.25)
enable_language(CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
find_package(Threads REQUIRED)
project(servertest CXX)
set(server_src
servertest04.cpp
)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wno-long-long -pedantic")
add_executable(servertest ${server_src})
target_link_libraries(servertest Threads::Threads)
#include <iostream>
#include <thread>
#include <vector>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <cstring>
void BridgeConnectionThread(int connection_socket) {
char buffer[1024] = {0};
const char *ack = "ACK";
int16_t i = 0;
while(true) {
int received_size = recv(connection_socket, buffer, sizeof(buffer), 0);
if(received_size == 0) {
std::cout << i << "Close" << std::endl;
break;
}
else if(received_size < 0) {
std::cerr << "Clushed Connection" << std::endl;
close(connection_socket);
return;
}
std::string buff(buffer, sizeof(buffer) / sizeof(buffer[0]));
std::cout << i << "Message from client:" << buff << std::endl;
send(connection_socket, ack, strlen(ack), 0);
std::cout << "send ACK" << std::endl;
i++;
}
close(connection_socket);
return;
}
int main() {
int server_socket, connection_socket;
struct sockaddr_in server_address, connection_address;
socklen_t addrSize;
server_socket = socket(AF_INET, SOCK_STREAM, 0);
if(server_socket == -1) {
std::cerr << "Socket creation failed" << std::endl;
exit(1);
}
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_address.sin_port = htons(2345);
if(bind(server_socket, (struct sockaddr *)&server_address, sizeof(server_address)) != 0) {
std::cerr << "Socket bind failed" << std::endl;
exit(1);
}
if(listen(server_socket, 5) != 0) {
std::cerr << "Listen failed" << std::endl;
exit(1);
}
while(true) {
addrSize = sizeof(connection_address);
connection_socket = accept(server_socket, (struct sockaddr *)&connection_address, (socklen_t*)&addrSize);
if(connection_socket < 0) {
continue;
}
std::thread ConnectionThread(BridgeConnectionThread, connection_socket);
ConnectionThread.detach();
}
close(server_socket);
return 0;
}
import socket
import time
def main():
server_address = "127.0.0.1"
server_port = 2345
recv_buffer = 1024
message = "Hello World!"
data = ""
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((server_address, server_port))
for i in range(50):
client_socket.send((str(i) + ":" + message).encode("utf-8"))
data = client_socket.recv(recv_buffer).decode("utf-8")
print(str(i) + ":" + data)
client_socket.close()
return
if __name__ == "__main__":
main()