1 changed files with 74 additions and 76 deletions
@ -1,77 +1,75 @@ |
|||
/*
|
|||
* rpc_transport.h |
|||
* 定义RPC传输层的接口,负责处理网络通信 |
|||
*/ |
|||
|
|||
#ifndef RPC_TRANSPORT_H
|
|||
#define RPC_TRANSPORT_H
|
|||
|
|||
#include "rpc_common.h"
|
|||
|
|||
/* 根据不同平台包含不同的头文件 */ |
|||
#ifdef _WIN32
|
|||
#include <winsock2.h>
|
|||
#include <ws2tcpip.h>
|
|||
#pragma comment(lib, "ws2_32.lib")
|
|||
|
|||
/* Windows平台的类型定义 */ |
|||
typedef SOCKET socket_t; |
|||
#define INVALID_SOCKET_VALUE INVALID_SOCKET
|
|||
#define CLOSE_SOCKET(s) closesocket(s)
|
|||
|
|||
/* Windows平台初始化和清理函数 */ |
|||
int rpc_winsock_init(); |
|||
void rpc_winsock_cleanup(); |
|||
#else
|
|||
/* Linux/Unix平台的头文件 */ |
|||
#include <sys/socket.h>
|
|||
#include <netinet/in.h>
|
|||
#include <arpa/inet.h>
|
|||
#include <unistd.h>
|
|||
|
|||
/* Linux/Unix平台的类型定义 */ |
|||
typedef int socket_t; |
|||
#define INVALID_SOCKET_VALUE (-1)
|
|||
#define CLOSE_SOCKET(s) close(s)
|
|||
|
|||
/* Linux/Unix平台不需要特殊的初始化和清理 */ |
|||
#define rpc_winsock_init() 0
|
|||
#define rpc_winsock_cleanup()
|
|||
#endif
|
|||
|
|||
/* 传输上下文 */ |
|||
typedef struct { |
|||
socket_t socket_fd; // 套接字文件描述符
|
|||
struct sockaddr_in address; // 地址信息
|
|||
} rpc_transport_t; |
|||
|
|||
/* 服务器上下文 */ |
|||
typedef struct { |
|||
socket_t server_fd; // 服务器套接字文件描述符
|
|||
struct sockaddr_in address; // 服务器地址信息
|
|||
} rpc_server_t; |
|||
|
|||
/* 传输层函数声明 */ |
|||
|
|||
// 初始化服务器
|
|||
int rpc_server_init(rpc_server_t* server, const char* host, uint16_t port, int backlog); |
|||
|
|||
// 服务器等待连接
|
|||
int rpc_server_accept(rpc_server_t* server, rpc_transport_t* transport); |
|||
|
|||
// 关闭服务器
|
|||
void rpc_server_close(rpc_server_t* server); |
|||
|
|||
// 初始化客户端传输
|
|||
int rpc_client_init(rpc_transport_t* transport, const char* server_host, uint16_t server_port); |
|||
|
|||
// 发送数据
|
|||
int rpc_transport_send(rpc_transport_t* transport, const void* data, size_t data_size); |
|||
|
|||
// 接收数据
|
|||
int rpc_transport_recv(rpc_transport_t* transport, void* buffer, size_t buffer_size); |
|||
|
|||
// 关闭传输连接
|
|||
void rpc_transport_close(rpc_transport_t* transport); |
|||
|
|||
/*
|
|||
* rpc_transport.h |
|||
* 定义RPC传输层的接口,负责处理网络通信 |
|||
*/ |
|||
|
|||
#ifndef RPC_TRANSPORT_H |
|||
#define RPC_TRANSPORT_H |
|||
#include "rpc_common.h" |
|||
/* 根据不同平台包含不同的头文件 */ |
|||
|
|||
#ifdef _WIN32 |
|||
#include <winsock2.h> |
|||
#include <ws2tcpip.h> |
|||
#pragma comment(lib, "ws2_32.lib") |
|||
/* Windows平台的类型定义 */ |
|||
typedef SOCKET socket_t; |
|||
#define INVALID_SOCKET_VALUE INVALID_SOCKET |
|||
#define CLOSE_SOCKET(s) closesocket(s) |
|||
|
|||
/* Windows平台初始化和清理函数 */ |
|||
int rpc_winsock_init(); |
|||
void rpc_winsock_cleanup(); |
|||
#else |
|||
|
|||
/* Linux/Unix平台的头文件 */ |
|||
#include <sys/socket.h> |
|||
#include <netinet/in.h> |
|||
#include <arpa/inet.h> |
|||
#include <unistd.h> |
|||
|
|||
/* Linux/Unix平台的类型定义 */ |
|||
typedef int socket_t; |
|||
#define INVALID_SOCKET_VALUE (-1) |
|||
#define CLOSE_SOCKET(s) close(s) |
|||
|
|||
/* Linux/Unix平台不需要特殊的初始化和清理 */ |
|||
#define rpc_winsock_init() 0 |
|||
#define rpc_winsock_cleanup() |
|||
#endif |
|||
/* 传输上下文 */ |
|||
|
|||
typedef struct { |
|||
socket_t socket_fd; // 套接字文件描述符
|
|||
struct sockaddr_in address; // 地址信息
|
|||
} rpc_transport_t; |
|||
/* 服务器上下文 */ |
|||
|
|||
typedef struct { |
|||
socket_t server_fd; // 服务器套接字文件描述符
|
|||
struct sockaddr_in address; // 服务器地址信息
|
|||
|
|||
} rpc_server_t; |
|||
/* 传输层函数声明 */ |
|||
// 初始化服务器
|
|||
|
|||
int rpc_server_init(rpc_server_t* server, const char* host, uint16_t port, int backlog); |
|||
// 服务器等待连接
|
|||
|
|||
int rpc_server_accept(rpc_server_t* server, rpc_transport_t* transport); |
|||
// 关闭服务器
|
|||
|
|||
void rpc_server_close(rpc_server_t* server); |
|||
// 初始化客户端传输
|
|||
|
|||
int rpc_client_init(rpc_transport_t* transport, const char* server_host, uint16_t server_port); |
|||
// 发送数据
|
|||
|
|||
int rpc_transport_send(rpc_transport_t* transport, const void* data, size_t data_size); |
|||
// 接收数据
|
|||
|
|||
int rpc_transport_recv(rpc_transport_t* transport, void* buffer, size_t buffer_size); |
|||
// 关闭传输连接
|
|||
|
|||
void rpc_transport_close(rpc_transport_t* transport); |
|||
#endif /* RPC_TRANSPORT_H */ |
|||
Loading…
Reference in new issue