当前位置:网站首页>网路编程_调试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、多个链接,一次只能一个,多个就要多个循环。
边栏推荐
- 实例048:数字比大小
- 781. 森林中的兔子
- [8.8] Code Source - [Non-falling subarray game] [Longest rising subsequence count (Bonus)] [Substring (data enhanced version)]
- 控制台中查看莫格命令的详细信息
- Go语言JSON文件的读写操作
- 【语义分割】2022-HRViT CVPR
- Web mining traceability?Browser browsing history viewing tool Browsinghistoryview
- 微生物是如何影响身体健康的
- On the Harvest of Travel
- 2022.8.8 Exam Travel Summary
猜你喜欢
随机推荐
[Kali Security Penetration Testing Practice Course] Chapter 8 Web Penetration
HackTheBox——Beep
The flask to add and delete
2022.8.9考试平衡的余数--1000题解
跨站请求伪造(CSRF)攻击是什么?如何防御?
2022.8.9 Exam arrangement and transformation--1200 questions solution
what is eabi
Open3D 网格均匀采样
【二叉树-中等】1379. 找出克隆二叉树中的相同节点
控制台中查看莫格命令的详细信息
基于C51的中断控制
[Red Team] ATT&CK - Auto Start - Registry Run Key, Startup Folder
[Red Team] ATT&CK - Self-starting - Self-starting mechanism using LSA authentication package
官宣出自己的博客啦
How to write a high-quality test case?
2022.8.8 exam sweeps the horse (sweeper) antithesis
2022.8.8考试摄像师老马(photographer)题解
【二叉树-中等】1261. 在受污染的二叉树中查找元素
Redis - Basic operations and usage scenarios of String|Hash|List|Set|Zset data types
Algorithm and voice dialogue direction interview question bank