当前位置:网站首页>网路编程_调试accept
网路编程_调试accept
2022-08-10 02:16:00 【joker_0030】
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<WinSock2.h>//网络库。<WinSock.h>
#pragma comment(lib,"Ws2_32.lib")//只有32位的。<Wsock32.lib>对应<WinSock.h>库。
int main(void)
{
WORD wdVersion = MAKEWORD(2,2);//传入MAKEWORD宏里,存入wdVersion里。
//MAKEWORD:原理((WORD)(((BYTE)(((DWORD_PTR)(a))&0xff))| ((WORD)(((BYTE)(((DWORD_PTR)(b)) &0xff)))<<8))。
WSADATA wdScokMsg;
//LPWSADATA lpw = malloc(sizeof(WSADATA));
//int a = *((char*)&wdVersion);
//int b = *((char*)&wdVersion+1);
//WSAStartup(wdVersion, lpw);
int nRes=WSAStartup(wdVersion,&wdScokMsg);
if (0!=nRes)
{
switch (nRes)
{
case WSASYSNOTREADY:
printf("重启下电脑试试,或者检查网络库。\n");
break;
case WSAVERNOTSUPPORTED:
printf("请更新网络库。\n");
break;
case WSAEINPROGRESS:
printf("请重新启动软件。\n");
break;
case WSAEPROCLIM:
printf("请尝试关掉不必要的软件,以为当前网络运行提供充足的资源。\n");
break;
/*case WSAEFAULT://参数问题。
break;*/
}
}
//校验版本。
if (2 != HIBYTE(wdScokMsg.wVersion) || 2 != LOBYTE(wdScokMsg.wVersion))
{
//说明版本不对。
//清理网络库。
WSACleanup();
return 0;
}
SOCKET socketServer = socket(AF_INET, SOCK_STREAM,12);
//成功返回可用的socket。失败返回INVALID_SOCKET。
//int a = WSAGetLastError();//检测最近的系统定义函数。
if (INVALID_SOCKET==socketServer)
{
int a = WSAGetLastError();//检测最近的系统定义函数。值为10043,请求的协议还没有在系统中配置,或者没有它存在的迹象。
//创建失败。
//清理网络库。
WSACleanup();
return 0;
}
//绑定地址与端口。
struct sockaddr_in si;
si.sin_family = AF_INET;
si.sin_port = htons(12345);//端口号
si.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
if (SOCKET_ERROR== bind(socketServer, (const struct sockaddr*)&si, sizeof(si)))//失败返回SOCKET_ERROR。成功返回0。
{
//出错了,SOCKET_ERROR是一个int类型的-1。
int a = WSAGetLastError();//检测最近的系统定义函数。值为10043,请求的协议还没有在系统中配置,或者没有它存在的迹象。
//释放
closesocket(socketServer);
//清理网络库。
WSACleanup();
return 0;
}
//监听。
if (SOCKET_ERROR == listen(socketServer, SOMAXCONN))
{
//出错了,SOCKET_ERROR是一个int类型的-1。
int a = WSAGetLastError();//检测最近的系统定义函数。值为10043,请求的协议还没有在系统中配置,或者没有它存在的迹象。
//释放
closesocket(socketServer);
//清理网络库。
WSACleanup();
return 0;
}
//创建客户端socket.
struct sockaddr_in clientMsg;
int len = sizeof(clientMsg);
SOCKET socketClient = accept(socketServer, (struct sockaddr*)&clientMsg, &len);
//SOCKET socketClient=accept(socketServer,NULL,NULL);
if (INVALID_SOCKET == socketClient)
{
printf("客户端链接失败\n");
//出错了,SOCKET_ERROR是一个int类型的-1。
int a = WSAGetLastError();//检测最近的系统定义函数。值为10043,请求的协议还没有在系统中配置,或者没有它存在的迹象。
//释放
closesocket(socketServer);
//清理网络库。
WSACleanup();
return 0;
}
printf("客户端链接成功\n");
//关闭释放。
closesocket(socketClient);
如果WSACleanup与closesocket(socketServer)顺序放反了则a返回10093,应用程序没有调用 WSAStartup,或者 WSAStartup 失败。
清理网络库。
//int b= WSACleanup();
关闭释放。
//int c= closesocket(socketServer);
//int a = WSAGetLastError();
//关闭释放。
closesocket(socketServer);
//清理网络库。
WSACleanup();
free(lpw);
system("pause");
return 0;
}
accept调试:
1、阻塞、同步,这个函数是阻塞的,没有客户链接,就会一直卡住。
2、多个链接,一次只能一个,多个就要多个循环。
边栏推荐
- ECCV 2022 Oral | CCPL: 一种通用的关联性保留损失函数实现通用风格迁移
- [Kali Security Penetration Testing Practice Course] Chapter 9 Wireless Network Penetration
- Robust Real-time LiDAR-inertial Initialization (Real-time Robust LiDAR Inertial Initialization) Paper Learning
- 别再用 offset 和 limit 分页了,性能太差!
- 【Kali安全渗透测试实践教程】第8章 Web渗透
- 2022年立下的flag完成情况
- MySQL: What MySQL optimizations have you done?
- 781. 森林中的兔子
- 网页挖矿溯源?浏览器浏览历史查看工具Browsinghistoryview
- 【Kali安全渗透测试实践教程】第6章 密码攻击
猜你喜欢
[Kali Security Penetration Testing Practice Course] Chapter 7 Privilege Escalation
数据库治理利器:动态读写分离
【Kali安全渗透测试实践教程】第7章 权限提升
How Microbes Affect Physical Health
Robust Real-time LiDAR-inertial Initialization (Real-time Robust LiDAR Inertial Initialization) Paper Learning
[Kali Security Penetration Testing Practice Course] Chapter 8 Web Penetration
ArcGIS Advanced (1) - Install ArcGIS Enterprise and create an sde library
【Kali安全渗透测试实践教程】第8章 Web渗透
[Kali Security Penetration Testing Practice Tutorial] Chapter 6 Password Attack
量化交易策略介绍及应用市值中性化选股
随机推荐
【二叉树-中等】1104. 二叉树寻路
【语义分割】2022-HRViT CVPR
Example 045: Summation
HRnet
【Kali安全渗透测试实践教程】第6章 密码攻击
P1564 膜拜
Data Governance (5): Metadata Management
Error state based Kalman filter ESKF
liunx PS1 settings
将信号与不同开始时间对齐
flask增删改查
【红队】ATT&CK - 自启动 - 利用LSA身份验证包自启动机制
Pycharm中6个常用插件推荐
Write a drop-down refresh component
Difference Between Data Mining and Data Warehousing
官宣出自己的博客啦
数据库治理利器:动态读写分离
The 25th day of the special assault version of the sword offer
what is eabi
2022.8.8 Exam Travel Summary