Browse Source

修改代码

master
xyiege 6 months ago
parent
commit
a3c5ed12b2
  1. 220
      scalib/build_windows.bat
  2. 2
      scalib/include/rpc_transport.h
  3. 16
      scalib/src/rpc_transport.c

220
scalib/build_windows.bat

@ -1,61 +1,159 @@
@echo off REM 输出utf8编码
chcp 65001
REM Windows平台构建脚本
@echo off
REM 配置参数 REM Windows平台构建脚本 - 优化版
set BUILD_DIR=build_windows setlocal enabledelayedexpansion
set CMAKE_GENERATOR="Visual Studio 17 2022"
set INSTALL_PREFIX=install REM 配置参数
set BUILD_DIR=build_windows
REM 检查命令行参数 set CMAKE_GENERATOR="Visual Studio 17 2022"
:parse_args set INSTALL_PREFIX=install
if "%1"=="--clean" ( set BUILD_TYPE=Release
echo Cleaning build directory... set NUM_JOBS=%NUMBER_OF_PROCESSORS%
if exist %BUILD_DIR% rmdir /s /q %BUILD_DIR% set CLEAN_BUILD=0
if exist %INSTALL_PREFIX% rmdir /s /q %INSTALL_PREFIX% set ONLY_CONFIG=0
shift set ONLY_BUILD=0
) set SKIP_INSTALL=0
REM 创建构建目录 REM 检查命令行参数
if not exist %BUILD_DIR% mkdir %BUILD_DIR% :parse_args
if "%~1"=="" goto end_parse_args
REM 运行CMake配置
pushd %BUILD_DIR% if "%~1"=="--clean" (
echo Running CMake configuration... set CLEAN_BUILD=1
cmake .. -G %CMAKE_GENERATOR% -DCMAKE_INSTALL_PREFIX=../%INSTALL_PREFIX% shift
if %ERRORLEVEL% neq 0 ( goto parse_args
echo CMake configuration failed! )
popd
exit /b 1 if "%~1"=="--config-only" (
) set ONLY_CONFIG=1
shift
REM 构建项目 goto parse_args
echo Building project... )
cmake --build . --config Release
if %ERRORLEVEL% neq 0 ( if "%~1"=="--build-only" (
echo Build failed! set ONLY_BUILD=1
popd shift
exit /b 1 goto parse_args
) )
REM 安装项目 if "%~1"=="--skip-install" (
echo Installing project... set SKIP_INSTALL=1
cmake --build . --config Release --target install shift
if %ERRORLEVEL% neq 0 ( goto parse_args
echo Installation failed! )
popd
exit /b 1 if "%~1"=="--debug" (
) set BUILD_TYPE=Debug
shift
popd goto parse_args
)
echo Build completed successfully!
echo Server executable: %INSTALL_PREFIX%\bin\rpc_server.exeecho Client executable: %INSTALL_PREFIX%\bin\rpc_client.exe if "%~1"=="--jobs" (
echo if not "%~2"=="" (
echo To run the server: set NUM_JOBS=%~2
cd %INSTALL_PREFIX%\bin shift
echo rpc_server.exe shift
goto parse_args
echo )
echo Then in another terminal: )
echo rpc_client.exe
echo 未知参数: %~1
:end_parse_args
REM 显示配置信息
cls
echo ====================================================
echo Windows平台构建脚本 - RPC项目
echo ====================================================
echo 构建目录: %BUILD_DIR%
echo 生成器: %CMAKE_GENERATOR%
echo 安装前缀: %INSTALL_PREFIX%
echo 构建类型: %BUILD_TYPE%
echo 并行任务数: %NUM_JOBS%
echo 清理构建: %CLEAN_BUILD%
echo ====================================================
REM 清理构建目录(如果需要)
if %CLEAN_BUILD% equ 1 (
echo 正在清理构建目录...
if exist %BUILD_DIR% (
rmdir /s /q %BUILD_DIR% >nul 2>&1
if errorlevel 1 (
echo 清理构建目录失败,请确保没有进程正在使用该目录。
exit /b 1
)
)
if exist %INSTALL_PREFIX% (
rmdir /s /q %INSTALL_PREFIX% >nul 2>&1
if errorlevel 1 (
echo 清理安装目录失败,请确保没有进程正在使用该目录。
exit /b 1
)
)
)
REM 创建构建目录
if not exist %BUILD_DIR% (
mkdir %BUILD_DIR% >nul 2>&1
if errorlevel 1 (
echo 创建构建目录失败。
exit /b 1
)
)
REM 运行CMake配置
pushd %BUILD_DIR% >nul 2>&1
if %ONLY_BUILD% equ 0 (
echo 正在运行CMake配置...
cmake .. -G %CMAKE_GENERATOR% -DCMAKE_INSTALL_PREFIX=../%INSTALL_PREFIX%
if errorlevel 1 (
echo CMake配置失败!
popd >nul 2>&1
exit /b 1
)
echo CMake配置成功。
if %ONLY_CONFIG% equ 1 (
echo 已完成配置,跳过构建和安装步骤。
popd >nul 2>&1
exit /b 0
)
)
REM 构建项目
if %SKIP_INSTALL% equ 0 (
echo 正在构建项目... [%BUILD_TYPE%]
cmake --build . --config %BUILD_TYPE% --parallel %NUM_JOBS%
if errorlevel 1 (
echo 构建失败!
popd >nul 2>&1
exit /b 1
)
echo 项目构建成功。
REM 安装项目
echo 正在安装项目...
cmake --build . --config %BUILD_TYPE% --target install
if errorlevel 1 (
echo 安装失败!
popd >nul 2>&1
exit /b 1
)
echo 项目安装成功。
) else (
echo 已跳过安装步骤。
)
popd >nul 2>&1
REM 显示构建结果
echo ====================================================
echo 构建完成!
echo 服务器可执行文件: %INSTALL_PREFIX%\bin\rpc_server.exe
echo 客户端可执行文件: %INSTALL_PREFIX%\bin\rpc_client.exe
echo ====================================================
exit /b 0

2
scalib/include/rpc_transport.h

@ -43,8 +43,8 @@ typedef struct {
socket_t socket_fd; // 套接字文件描述符 socket_t socket_fd; // 套接字文件描述符
struct sockaddr_in address; // 地址信息 struct sockaddr_in address; // 地址信息
} rpc_transport_t; } rpc_transport_t;
/* 服务器上下文 */
/* 服务器上下文 */
typedef struct { typedef struct {
socket_t server_fd; // 服务器套接字文件描述符 socket_t server_fd; // 服务器套接字文件描述符
struct sockaddr_in address; // 服务器地址信息 struct sockaddr_in address; // 服务器地址信息

16
scalib/src/rpc_transport.c

@ -96,9 +96,13 @@ int rpc_server_init(rpc_server_t* server, const char* host, uint16_t port, int b
server->address.sin_port = htons(port); server->address.sin_port = htons(port);
// 绑定地址到套接字 // 绑定地址到套接字
struct sockaddr_in* addr_ptr = &server->address; const struct sockaddr* addr_ptr = (const struct sockaddr*)&server->address;
int addr_len = sizeof(server->address); int addr_len = sizeof(server->address);
if (bind(server->server_fd, (struct sockaddr*)addr_ptr, addr_len) != 0) { #ifdef _WIN32
if (bind(server->server_fd, addr_ptr, addr_len) != 0) {
#else
if (bind(server->server_fd, addr_ptr, addr_len) != 0) {
#endif
PRINT_ERROR("bind failed"); PRINT_ERROR("bind failed");
CLOSE_SOCKET(server->server_fd); CLOSE_SOCKET(server->server_fd);
return RPC_NET_ERROR; return RPC_NET_ERROR;
@ -241,9 +245,13 @@ int rpc_client_init(rpc_transport_t* transport, const char* server_host, uint16_
// 连接到服务器 // 连接到服务器
struct sockaddr_in* conn_addr_ptr = &transport->address; const struct sockaddr* conn_addr_ptr = (const struct sockaddr*)&transport->address;
int conn_addr_len = sizeof(transport->address); int conn_addr_len = sizeof(transport->address);
if (connect(transport->socket_fd, (struct sockaddr*)conn_addr_ptr, conn_addr_len) != 0) { #ifdef _WIN32
if (connect(transport->socket_fd, conn_addr_ptr, conn_addr_len) != 0) {
#else
if (connect(transport->socket_fd, conn_addr_ptr, conn_addr_len) != 0) {
#endif
PRINT_ERROR("connection failed"); PRINT_ERROR("connection failed");
CLOSE_SOCKET(transport->socket_fd); CLOSE_SOCKET(transport->socket_fd);
return RPC_NET_ERROR; return RPC_NET_ERROR;

Loading…
Cancel
Save