当前位置: 首页 > 工具软件 > wxDev-C++ > 使用案例 >

c语言编程基础.pdf,Sockets编程基础C语言示例.pdf

孙岳
2023-12-01

第 1 页 共 4 页 TCP IP 编程基础示例编程基础示例 服务端应答程序 说明 本程序根据 TCP IP Sockets in C 第二章改写 目的 建立一个最简版本的应答服务器 时间 2011 02 24 文件名 Server c include include include define MAXPENDING 5 最大的等待连接请求数 define RCVBUFSIZE 32 最大的接收字节数 void HandleTCPClient int clntSocket 处理客户端连接的函数 int main int argc char argv int servSock 服务端的 Socket int clntSock 客户端的 Socket struct sockaddr in echoServAddr 本地地址 struct sockaddr in echoClntAddr 客户端地址 unsigned short echoServPort 服务端口 unsigned int clntLen 客户端地址数据结构的长度 WSADATA wsaData WinSock 建立连接的结构体 初始化 WinSock2 0 WSAStartup MAKEWORD 2 0 加载 Winsock 2 0 DLL 输入服务端口号 printf 请输入服务器端口号 1025 65535 n scanf d 建立接收连接的 Socket servSock socket PF INET SOCK STREAM IPPROTO TCP 构造本地地址的结构体 memset 结构体数据全部清零 echoServAddr sin family AF INET Internet 地址协议 echoServAddr sin addr s addr htonl INADDR ANY 任意地址 echoServAddr sin port htons echoServPort 本地端口 绑定本地地址 bind servSock struct sockaddr 第 2 页 共 4 页 监听连接请求 listen servSock MAXPENDING for 与客户端通信 收发信息 设置 in out 参数的大小 clntLen sizeof echoClntAddr 等待客户端连接 clntSock accept servSock struct sockaddr printf 与客户端 s 连接 等待接收信息 n inet ntoa echoClntAddr sin addr clntSock 如果已经连接到一个客户端 HandleTCPClient clntSock 处理客户端的消息 void HandleTCPClient int clntSocket 作用 与客户端通信 收发信息 参数 clntSocket 客户端的 Socket 返回值 无 void HandleTCPClient int clntSocket char echoBuffer RCVBUFSIZE 发送字符串 char recvBuffer RCVBUFSIZE 接收字符串 int recvMsgSize 接收字符串的长度 memset echoBuffer 0 sizeof echoBuffer 信息内容清空 memset recvBuffer 0 sizeof recvBuffer 信息内容清空 for 从客户端接收消息 因为接收一次不一定能全部接收 所以要判断是否全部接收 recvMsgSize recv clntSocket recvBuffer RCVBUFSIZE 0 if recvMsgSize RCVBUFSIZE recvMsgSize 0 recvMsgSize 大于 0 说明接收到消息 puts 接收的信息为 n puts recvBuffer memset recvBuffer 0 sizeof recvBuffer 信息内容清空 puts 请输入回应的信息 最大 32 字节 n fflush stdin fgets echoBuffer RCVBUFSIZE stdin send clntSocket echoBuffer RCVBUFSIZE 0 memset echoBuffer 0 sizeof echoBuffer 信息内容清空 继续等待是否有信息接收 第 3 页 共 4 页 for 与客户端通信 收发信息 recvMsgSize recv clntSocket recvBuffer RCVBUFSIZE 0 if recvMsgSize RCVBUFSIZE recvMsgSize 0 break closesocket clntSocket 关闭客户端连接 客户端应答程序 说明 本程序根据 TCP IP Sockets in C 第二章改写 目的 建立一个最简版本的 WinSock 程序设计 日期 2011 02 24 文件名 Client c include include include define RCVBUFSIZE 32 定义可以接收的最大字符串长度 int main int argc char argv int sock 声明 Socket struct sockaddr in echoServAddr 服务端地址 unsigned short echoServPort 服务端端口 char servIP 32 服务端 IP 地址 char echoString 32 发送到服务端的字符串 char echoBuffer RCVBUFSIZE 接收到的字符串 int bytesRcvd 接收到的字符串长度 WSADATA wsaData WinSock 建立连接的结构体 WSAStartup MAKEWORD 2 0 加载 Winsock 2 0 DLL 从控制台输入服务端的 IP 地址和端口 printf 请输入服务器的 IP 地址 xxx xxx xxx xxx n scanf s servIP printf 请输入连接的端口 1025 65535 n scanf d 建立 Socket sock socket PF INET SOCK STREAM IPPROTO TCP 构造服务端地址结构体 memset 结构体清零 echoServAddr sin family AF INET Internet 地址协议 echoServAddr sin addr s addr inet addr servIP 服务端 IP 地址 echoServAddr sin port htons echoServPort 服务端端口 第 4 页 共 4 页 连接到服务端 connect sock struct sockaddr 开始收发信息 for puts 请输入要发送的信息 最大 32 字节 n fflush stdin fgets echoString 32 stdin send sock echoString 32 0 memset echoString 0 sizeof echoString 发送完毕信息清空 puts 接收的回答信息为 n for 因为接收一次不一定能全部接收 所以要判断是否全部接收 bytesRcvd recv sock echoBuffer RCVBUFSIZE 0 if bytesRcvd RCVBUFSIZE bytesRcvd 0 break puts echoBuffer memset echoBuffer 0 sizeof echoBuffer 发送完毕信息清空 结束收发信息 closesocket sock WSACleanup 清理 Winsock exit 0 分别编译 先运行服务端程序 再运行客户端程序 运行结果如下 若 使 用 Code Blocks 编 译 需 要 在 Setting Compiler and debugger Linker setting Other linker options 中添加 lwsock32 lws2 32 若使用 wxDev C 编译 需要在 工具工具 编译选项编译选项 在连接器命令行加入以下命令在连接器命令行加入以下命令 中 加入 lwsock32 lws2 32

展开阅读全文

 类似资料: