通过对服务器端的操作进行封装,我们可以看到这个类和客户端的类结构以及封装思路是差不多的,并且两个类的内部有些操作的重叠的:接收和发送通信数据的函数 recvMsg()、sendMsg(),以及内部函数 readn()、writen()。不仅如此服务器端的类设计成这样样子是有缺陷的:服务器端一般需要和多个客户端建立连接,因此通信的套...
classIPAddress { public: structsockaddr_in address; public: IPAddress() { address.sin_addr.S_un.S_addr=INADDR_ANY; address.sin_family=AF_INET; address.sin_port=htons(0); } IPAddress(char*ip,intport) { address.sin_addr.S_un.S_addr=inet_addr(ip); address.sin_family=AF_INET; addr...
MySocket类是一个 C++ 套接字类,封装了在 Windows 平台上使用原生网络 API 进行同步远程通信的基本功能,该类需要使用多字节编码模式,服务端与客户端均需要引入此类,在项目头文件中均需要新建MySocket.hpp文件。 完整代码如下所示; #pragmaonce#include<WinSock2.h>#pragmacomment(lib,"ws2_32.lib")class MySocke...
三,实现方式 三大件,两个接口ITcp,IConnection,一个公共类SocketCommon。 ITcp接口: 约束了服务端和客户端的操作,调用Listen函数即可打开被动连接,等待客户端的连接请求,调用Connect函数,可以发送连接请求; 本文件提供了ITcp接口的一个实现类——Tcp_NET5_Fixed_Sync,用户可以根据需要来扩展该类。 IConnection接...
7)socket()函数 8)bind()函数 9)connect()函数 10)listen()函数 11)accept()函数 12)send()和recv()函数 13)sendto()和recvfrom()函数 14)close()和shutdown()函数 15)getpeername()函数 16)gethostname()函数 17)域名服务(DNS) 18)客户-服务器背景知识 19)简单的服务器 20)简单的客户端 21)数...
ACE_SOCK类是使用Socket的基类,所有使用Socket通讯的类都从这个类派生。本类的功 能包括 1 创建和销毁Socket句柄 2 获取本地和远端的网络地址 3 设置和读取Socket选项。 基本结构如下 class ACE_SOCK : public ACE_IPC_SAP { public: //设置Socket的属性,包装了setsockopt系统函数 ...
通过调整可以发现,套接字服务器类功能更加单一了,这样设计即解决了代码冗余问题,还能使这两个类更容易维护。 3. 测试代码 3.1 客户端 int main() { // 1. 创建通信的套接字 TcpSocket tcp; // 2. 连接服务器IP port int ret = tcp.connectToHost("192.168.237.131", 10000); if (ret == -1) {...
Socket 包括流式(SOCKET_STREAM)、数据报(SOCK_DGRAM)和原始套接字(SOCK_RAW)三种类型,分别适用于不同场景。通过 IP 地址和端口号,Socket 能准确识别并转发数据包至指定进程。端口号分为知名端口(1-1023)、注册端口(1024-49151)和动态端口(49152-65535),确保数据准确交付。
通过通信流程可以看出服务器和客户端有些操作步骤是相同的,因此封装的功能函数是可以共用的,相关的通信函数声明如下: /// 服务器 /// /// int bindSocket(int lfd, unsigned short port); int setListen(int lfd); int acceptConn(int lfd, struct sockaddr_in *addr); ...