Browse Source

修改代码

master
xyiege 2 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 Windows平台构建脚本
REM 配置参数
set BUILD_DIR=build_windows
set CMAKE_GENERATOR="Visual Studio 17 2022"
set INSTALL_PREFIX=install
REM 检查命令行参数
:parse_args
if "%1"=="--clean" (
echo Cleaning build directory...
if exist %BUILD_DIR% rmdir /s /q %BUILD_DIR%
if exist %INSTALL_PREFIX% rmdir /s /q %INSTALL_PREFIX%
shift
)
REM 创建构建目录
if not exist %BUILD_DIR% mkdir %BUILD_DIR%
REM 运行CMake配置
pushd %BUILD_DIR%
echo Running CMake configuration...
cmake .. -G %CMAKE_GENERATOR% -DCMAKE_INSTALL_PREFIX=../%INSTALL_PREFIX%
if %ERRORLEVEL% neq 0 (
echo CMake configuration failed!
popd
exit /b 1
)
REM 构建项目
echo Building project...
cmake --build . --config Release
if %ERRORLEVEL% neq 0 (
echo Build failed!
popd
exit /b 1
)
REM 安装项目
echo Installing project...
cmake --build . --config Release --target install
if %ERRORLEVEL% neq 0 (
echo Installation failed!
popd
exit /b 1
)
popd
echo Build completed successfully!
echo Server executable: %INSTALL_PREFIX%\bin\rpc_server.exeecho Client executable: %INSTALL_PREFIX%\bin\rpc_client.exe
echo
echo To run the server:
cd %INSTALL_PREFIX%\bin
echo rpc_server.exe
echo
echo Then in another terminal:
echo rpc_client.exe
REM 输出utf8编码
chcp 65001
@echo off
REM Windows平台构建脚本 - 优化版
setlocal enabledelayedexpansion
REM 配置参数
set BUILD_DIR=build_windows
set CMAKE_GENERATOR="Visual Studio 17 2022"
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 检查命令行参数
:parse_args
if "%~1"=="" goto end_parse_args
if "%~1"=="--clean" (
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
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 创建构建目录
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; // 套接字文件描述符
struct sockaddr_in address; // 地址信息
} rpc_transport_t;
/* 服务器上下文 */
/* 服务器上下文 */
typedef struct {
socket_t server_fd; // 服务器套接字文件描述符
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);
// 绑定地址到套接字
struct sockaddr_in* addr_ptr = &server->address;
const struct sockaddr* addr_ptr = (const struct sockaddr*)&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");
CLOSE_SOCKET(server->server_fd);
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);
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");
CLOSE_SOCKET(transport->socket_fd);
return RPC_NET_ERROR;

Loading…
Cancel
Save