Browse Source

修改代码

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

184
scalib/build_windows.bat

@ -1,61 +1,159 @@
@echo off REM 输出utf8编码
chcp 65001
REM Windows平台构建脚本 @echo off
REM Windows平台构建脚本 - 优化版
setlocal enabledelayedexpansion
REM 配置参数 REM 配置参数
set BUILD_DIR=build_windows set BUILD_DIR=build_windows
set CMAKE_GENERATOR="Visual Studio 17 2022" set CMAKE_GENERATOR="Visual Studio 17 2022"
set INSTALL_PREFIX=install set INSTALL_PREFIX=install
set BUILD_TYPE=Release
set NUM_JOBS=%NUMBER_OF_PROCESSORS%
set CLEAN_BUILD=0
set ONLY_CONFIG=0
set ONLY_BUILD=0
set SKIP_INSTALL=0
REM 检查命令行参数 REM 检查命令行参数
:parse_args :parse_args
if "%1"=="--clean" ( if "%~1"=="" goto end_parse_args
echo Cleaning build directory...
if exist %BUILD_DIR% rmdir /s /q %BUILD_DIR% if "%~1"=="--clean" (
if exist %INSTALL_PREFIX% rmdir /s /q %INSTALL_PREFIX% set CLEAN_BUILD=1
shift
goto parse_args
)
if "%~1"=="--config-only" (
set ONLY_CONFIG=1
shift
goto parse_args
)
if "%~1"=="--build-only" (
set ONLY_BUILD=1
shift
goto parse_args
)
if "%~1"=="--skip-install" (
set SKIP_INSTALL=1
shift
goto parse_args
)
if "%~1"=="--debug" (
set BUILD_TYPE=Debug
shift shift
goto parse_args
)
if "%~1"=="--jobs" (
if not "%~2"=="" (
set NUM_JOBS=%~2
shift
shift
goto parse_args
)
)
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 创建构建目录 REM 创建构建目录
if not exist %BUILD_DIR% mkdir %BUILD_DIR% if not exist %BUILD_DIR% (
mkdir %BUILD_DIR% >nul 2>&1
if errorlevel 1 (
echo 创建构建目录失败。
exit /b 1
)
)
REM 运行CMake配置 REM 运行CMake配置
pushd %BUILD_DIR% pushd %BUILD_DIR% >nul 2>&1
echo Running CMake configuration...
cmake .. -G %CMAKE_GENERATOR% -DCMAKE_INSTALL_PREFIX=../%INSTALL_PREFIX% if %ONLY_BUILD% equ 0 (
if %ERRORLEVEL% neq 0 ( echo 正在运行CMake配置...
echo CMake configuration failed! cmake .. -G %CMAKE_GENERATOR% -DCMAKE_INSTALL_PREFIX=../%INSTALL_PREFIX%
popd if errorlevel 1 (
exit /b 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 构建项目 REM 构建项目
echo Building project... if %SKIP_INSTALL% equ 0 (
cmake --build . --config Release echo 正在构建项目... [%BUILD_TYPE%]
if %ERRORLEVEL% neq 0 ( cmake --build . --config %BUILD_TYPE% --parallel %NUM_JOBS%
echo Build failed! if errorlevel 1 (
popd echo 构建失败!
exit /b 1 popd >nul 2>&1
) exit /b 1
)
REM 安装项目 echo 项目构建成功。
echo Installing project...
cmake --build . --config Release --target install REM 安装项目
if %ERRORLEVEL% neq 0 ( echo 正在安装项目...
echo Installation failed! cmake --build . --config %BUILD_TYPE% --target install
popd if errorlevel 1 (
exit /b 1 echo 安装失败!
) popd >nul 2>&1
exit /b 1
popd )
echo 项目安装成功。
echo Build completed successfully! ) else (
echo Server executable: %INSTALL_PREFIX%\bin\rpc_server.exeecho Client executable: %INSTALL_PREFIX%\bin\rpc_client.exe echo 已跳过安装步骤。
echo )
echo To run the server:
cd %INSTALL_PREFIX%\bin popd >nul 2>&1
echo rpc_server.exe
REM 显示构建结果
echo echo ====================================================
echo Then in another terminal: echo 构建完成!
echo rpc_client.exe 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