《Windows网络编程案例教程》-董相志 学习记录 阻塞/非阻塞套接字编程

本文记录了学习《Windows网络编程案例教程》中关于阻塞和非阻塞套接字编程的过程。首先介绍了阻塞套接字的客户机和服务器编程步骤,包括启动Winsock服务、创建套接字、连接、接收数据等操作。接着,详细阐述了非阻塞套接字的设置和主循环的构建。最后,强调了服务器仅接受一个客户端连接的限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《Windows网络编程案例教程》-董相志 学习记录 阻塞/非阻塞套接字编程

2.3 阻塞/非阻塞套接字编程
阻塞套接字编程通信流程图
在这里插入图片描述
2.3.1 阻塞套接字客户机编程
1.启动并初始化Winsock2服务

WSADATA WsaDat;
WSAStartup(MAKEWORD(2,2),&WsaDat); 

2.创建Socket

SOCKET Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 

3.解析服务器主机名、配置服务器地址、端口信息

struct hostent *host;
host=gethostbyname("localhost"); 
SOCKADDR_IN SockAddr;
SockAddr.sin_port=htons(8888);
SockAddr.sin_family=AF_INET;
SockAddr.sin_addr.s_addr=*((unsigned long*)host->h_addr); 
  1. 连接服务器
connect(Socket,(SOCKADDR*)(&SockAddr),sizeof(SockAddr)); 

5.接收数据并显示

char buffer[1024];
int nDataLength=recv(Socket,buffer,1024,0);
std::cout<<buffer;

6.断开套接字连接

shutdown(socket,SD_SEND);

7.关闭套接字

closesocket(socket);

8.关闭Winsock套接字服务,释放资源

WSACleanup();

程序2.4 阻塞式套接字客户机完整代码

//程序2.4 阻塞式套接字客户机完整代码
#include <iostream>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")

int main()
{
   
	// 初始化 Winsock服务
	WSADATA WsaDat;
	if(WSAStartup(MAKEWORD(2,2),&WsaDat)!=0)
	{
   
		std::cout<<"Winsock错误 - Winsock服务初始化失败!\r\n";
		WSACleanup();
		system("PAUSE");
		return 0;
	}
	
	// 创建套接字
	SOCKET Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	if(Socket==INVALID_SOCKET)
	{
   
		std::cout<<"套接字错误 -创建套接字失败!\r\n";
		WSACleanup();
		system("PAUSE");
		return 0;
	}

	// 主机名解析
	struct hostent *host;
	if((host=gethostbyname("localhost"))==NULL)
	{
   
		std::cout<<"主机名解析失败!\r\n";
		WSACleanup();
		system("PAUSE");
		return 0;
	}

	// 初始化套接字地址结构信息
	SOCKADDR_IN SockAddr;
	SockAddr.sin_port=htons(8888);
	SockAddr.sin_family=AF_INET;
	SockAddr.sin_addr.s_addr=*((unsigned long*)host->h_addr);

	// 连接服务器
	if(connect(Socket,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值