当前位置:网站首页>网路编程_调试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、多个链接,一次只能一个,多个就要多个循环。
边栏推荐
- [Kali Security Penetration Testing Practice Course] Chapter 8 Web Penetration
- Robust Real-time LiDAR-inertial Initialization (Real-time Robust LiDAR Inertial Initialization) Paper Learning
- Database management tool: dynamic read-write separation
- MMDetection框架的anchor_generators.py解析
- In automated testing, test data is separated from scripts and parameterized methods
- 【二叉树-中等】1104. 二叉树寻路
- Chapter 21 Source Code File REST API Reference (3)
- 基于误差状态的卡尔曼滤波ESKF
- 2022.8.8考试游记总结
- liunx PS1 settings
猜你喜欢

excel高级绘图技巧100讲(二十三)-Excel中实现倒计时计数

FusionCompute产品介绍

【二叉树-困难】124. 二叉树中的最大路径和

【语义分割】2022-HRViT CVPR

如何编写一份优质的测试用例?

实例048:数字比大小

IDEA自动生成serialVersionUID

Little rookie Hebei Unicom induction training essay

What makes training multi-modal classification networks hard?
![[Kali Security Penetration Testing Practice Tutorial] Chapter 6 Password Attack](/img/ac/e944d81afc741c38dc775d71dc9014.png)
[Kali Security Penetration Testing Practice Tutorial] Chapter 6 Password Attack
随机推荐
In automated testing, test data is separated from scripts and parameterized methods
what is eabi
What is a Cross-Site Request Forgery (CSRF) attack?How to defend?
[Kali Security Penetration Testing Practice Course] Chapter 8 Web Penetration
2022.8.8 Exam Travel Summary
2022.8.9 Exam Travel Summary
How Microbes Affect Physical Health
【红队】ATT&CK - 自启动 - 注册表运行键、启动文件夹
The Evolutionary History of the "Double Gun" Trojan Horse Virus
【语义分割】2022-HRViT CVPR
【二叉树-困难】124. 二叉树中的最大路径和
数据治理(五):元数据管理
【Kali安全渗透测试实践教程】第9章 无线网络渗透
Robust Real-time LiDAR-inertial Initialization(实时鲁棒的LiDAR惯性初始化)论文学习
Research on IC enterprises
Chapter 21 Source Code File REST API Reference (3)
数组(一)
2022.8.8 Exam written in memory (memory)
LeetCode每日两题01:移动零 (均1200道)方法:双指针
GDB之指令基础参数