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

该博客介绍了TCP/IP编程的基础,包括一个简单的服务端应答程序和服务端连接处理函数。程序基于《TCPIP Sockets in C》改写,目的是展示WinSock程序设计的基本流程。服务端程序创建监听连接,接收客户端请求,进行信息交换;客户端程序则连接服务端,发送并接收数据。博客详细展示了两个程序的源代码,适合初学者理解TCP/IP套接字编程。
摘要由CSDN通过智能技术生成

第 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

展开阅读全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值