################服务端

1.准备工作导入头文件

 #include<WinSock2.h>
#pragma comment(lib, "ws2_32.lib")

2.确定版本信息

   MSAStartup :异步套接字的启动命令 .  第一个参数是版本请求,高阶字节是修订版本,低阶字节是主版本号

                    第二个参数是一个结构体,接收socket的实现细节

 WSADATA wsaData;
WSAStartup(MAKEWORD(,),&wsaData);
if(LOBYTE(wsaData.wVersion)!= || HIBYTE(wsaData.wVersion)!=)
{
printf("请求版本失败");
return ;
}

3.创建socket

  第一个参数表示要使用的协议族 : AF_INET IPv4的地址 和 端口号(16位)的组合

  第二个参数表示类型 SOCK_STREAM 流式socket , 面向连接的socket

  第三个参数指定协议 IPPROTO_TCP 使用 TCP 传输协议

 SOCKET serverSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)
if(INVALID_SOCKET == severSocket)
{
printf("套接字创建失败");
return ;
}

4.初始化协议地址族

 SOCKADDR_IN serverAddr = {}; //初始化协议地址
serverAddr.sin_family = AF_INET;//必须和创建socket的IP协议一致
serverAddr.sin_prot = htons(); //服务器端口,客户端通过这个端口连接 //ip地址是点分格式的字符串 , 用inet_addr来转换整数
serverAddr.sin_addr.S_un.S_addr = inet_addr("172.0.0.1");

5.绑定

 if(SOCKET_ERROR == bind(serverSocket , (SOCKADDR*)&serverAddr , sizeof(serverAddr)))
{
printf("绑定失败");
closesocket(serverSocket); //释放socket
WSACleanup(); //关闭套接字
return ;
}
printf("绑定成功");

6.监听

listen的第二个参数是监听的个数 , 等待连接的队列最大长度

 if(SOCKET_ERROR == listen(serverSocket, ))
{
printf("监听失败");
closesocket(serverSocket); //释放socket
WSACleanup(); //关闭套接字
return ;
}
printf("监听成功");

7.接受连接

  accetp 第二第三个参数可以给NULL 表示不保存连接进来的客户端(ip)信息 , 不给NULL 表示保存客户端信息

 SOCKADDR_IN clientAddr = {};
int len = sizeof(clientAddr);
SOCKET clientSocket = accept(serverSocket,(SOCKADDR*)&clientAddr, &len); //阻塞函数
if(clientSocket == INVALID_SOCKET)
{
printf("连接失败");
closesocket(serverSocket); //释放socket
WSACleanup(); //关闭套接字
return ;
}
printf("连接成功");
printf("客户端(%s)\n" , inet_ntoa(clientAddr.sin_addr));

8.开始通讯

recv的第一个参数表示客户端的socket 进行接收数据  , 第四个参数表示收发方式默认为0, 一次收完

 char recvBuff[] = {};
while()
{
memset(recvBuff, , sizeof(recvBuff));
if(recv(clientSocket , recvBuff, sizeof(recvBuff)- , ) >) //阻塞函数
{
printf(">>%s\n" , recvBuff);
} char sendBuff[] = {};
memset(sendBuff, , sizeof(sendBuff));
printf("请输入:\n");
scanf_s("%s" , sendBuff, sizeof(sendBuff)-);
//一次收发
send(clientSocket , sendBuff, strlen(sendBuff), );
}

9.关闭socket

 closesocket(clientSocket);
closesocket(serverSocket);
WSACleanup();

################客户端

1.准备工作导入头文件


2.确定版本信息

   MSAStartup :异步套接字的启动命令 .  第一个参数是版本请求,高阶字节是修订版本,低阶字节是主版本号

                    第二个参数是一个结构体,接收socket的实现细节

3.创建socket

  第一个参数表示要使用的协议族 : AF_INET IPv4的地址 和 端口号(16位)的组合

  第二个参数表示类型 SOCK_STREAM 流式socket , 面向连接的socket

  第三个参数指定协议 IPPROTO_TCP 使用 TCP 传输协议

 SOCKET clientSocket= socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)
if(INVALID_SOCKET == clientSocket)
{
printf("套接字创建失败");
return ;
}

4.初始化协议地址族(初始化的是服务端的ip地址及端口, 表示连接用)

 SOCKADDR_IN clientAddr = {}; //初始化协议地址
clientAddr.sin_family = AF_INET;//必须和创建socket的IP协议一致
clientAddr.sin_prot = htons(); //服务器端口,客户端通过这个端口连接 //ip地址是点分格式的字符串 , 用inet_addr来转换整数
clientAddr.sin_addr.S_un.S_addr = inet_addr("172.0.0.1");

5.连接

 if(SOCKET_ERROR == connect(clientSocket , (sockaddr *)&clientAddr , sizeof(clientAddr)))
{
printf("连接失败");
closesocket(clientSocket); //释放socket
WSACleanup(); //关闭套接字
return ;
}
printf("连接成功");

8.开始通讯

recv的第一个参数表示客户端的socket 进行接收数据  , 第四个参数表示收发方式默认为0, 一次收完

 char sendBuff[] = {};
while()
{
memset(sendBuff, , sizeof(sendBuff));
printf("请输入:\n");
scanf_s("%s" , sendBuff, sizeof(sendBuff)-);
//一次收发
send(clientSocket , sendBuff, strlen(sendBuff), ); char recvBuff[] = {};
memset(recvBuff, , sizeof(recvBuff));
if(recv(clientSocket , recvBuff, sizeof(recvBuff)- , ) >) //阻塞函数
{
printf(">>%s\n" , recvBuff);
}
}

9.关闭socket

 closesocket(clientSocket);
WSACleanup();

Windows的socket编程的更多相关文章

  1. [补] windows C socket编程——大物实验预约

    注 : 心血来潮,想着把这两年没能记录下来的经历,写一波回忆杀.诚然,有些经历十分复杂繁琐,希望能耐下性子,写出好文章来,可惜一时不能全想起来这两年来的种种,就想起来什么便写什么吧. 时间估摸着是大一 ...

  2. 记一次:Windows的Socket编程学习和分析过程

    Socket编程依赖于:WS2_32.dll --- 服务端 --- .导入我们需要的函数 #incldue <windows.h> //#include<WinSock2.h> ...

  3. windows下socket编程:区分shutdown()及closesocket()

    以下描述主要是针对windows平台下的TCP socket而言. 首先需要区分一下关闭socket和关闭TCP连接的区别,关闭TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包( ...

  4. windows下socket编程实现client和server双向通信

    服务端代码server.c // server.cpp : Defines the entry point for the console application. // #include <s ...

  5. winsock教程- windows下的socket编程(c语言实现)

    winsock教程- windows下的socket编程(c语言实现) 使用winsock进行socket 编程     这是一个学习windows下socket编程(c语言)的快速指南.这是因为一下 ...

  6. Windows Phone下的Socket编程

    讨论下有关于Windows Phone下的Socket编程方面的知识. Socket就是通常所称的套接字,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过Socket向网络发出请求或者应答 ...

  7. linux tcp/ip编程和windows tcp/ip编程差别以及windows socket编程详解

    最近要涉及对接现有应用visual c++开发的tcp客户端,花时间了解了下windows下tcp开发和linux的差别,从开发的角度而言,最大的差别是头文件(早期为了推广尽可能兼容,后面越来越扩展, ...

  8. 转:socket编程在windows和linux下的区别

    如无其它说明,本文所指Linux均表示2.6内核Linux,GCC编译器,Windows均表示Windows XP系统,Visual Studio 2005 sp1编译环境. 下面大概分几个方面进行罗 ...

  9. socket编程在windows和linux下的区别

    如无其它说明,本文所指Linux均表示2.6内核Linux,GCC编译器,Windows均表示Windows XP系统,Visual Studio 2005 sp1编译环境. 下面大概分几个方面进行罗 ...

随机推荐

  1. C++ EH Exception(0xe06d7363)----抛出过程

    C++ EH Exception是Windows系统VC++里对c++语言的throw的分类和定义,它的代码就是0xe06d7363.在VC++里其本质也是SEH结构化异常机制.在我们分析用户崩溃的例 ...

  2. Cogs 1632. 搬运工(二分图最小点覆盖)

    搬运工 ★ 输入文件:worker.in 输出文件:worker.out 简单对比 时间限制:1 s 内存限制:256 MB [题目描述] 小涵向小宇推荐了一款小游戏. 游戏是这样的,在一个n*n的地 ...

  3. manjaro AwesomeWM 上使用双显示器

    本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/dual_monitor_manjaro_awesome 安装ma ...

  4. C++2.0新特性(七)——<Smart Pointer(智能指针)之weak_ptr>

    一.weak_ptr出现的意义 上一节提到过shared_ptr,它会自动释放“不再需要使用的对象”的相应的资源,但是它不是万能的,在某些时候(比如说循环引用),它会显得力不从心,这就是weak_pt ...

  5. restframework之节流

    基本思路(原生Django而言): 在django2.x中,若出现节流(访问频率控制)的需求,我们首先想到的是使用一个字典(dict类型)来存储所有IP地址的访问时间记录,这是针对于匿名用户(IP)而 ...

  6. VLAD算法浅析, BOF、FV比较

    划重点 ================================================= BOF.FV.VLAD等算法都是基于特征描述算子的特征编码算法,关于特征描述算子是以SIFT ...

  7. 【牛客】小w的魔术扑克 (并查集?? 树状数组)

    题目描述 小w喜欢打牌,某天小w与dogenya在一起玩扑克牌,这种扑克牌的面值都在1到n,原本扑克牌只有一面,而小w手中的扑克牌是双面的魔术扑克(正反两面均有数字,可以随时进行切换),小w这个人就准 ...

  8. python 安装离线库

    (起因:报错找不到一个module,百度也找不到这个module,机智如我找宁博翻墙看怎么解决,毕竟是歪果仁的代码嘛,果真就在git找到了这个module哈哈哈哈机智如我!) 方法: 进入命令行窗口, ...

  9. SQLSERVER教师学生成绩课程四表联合各种SQL考题

    --CREATE DATABASE EXAM_1 --GO USE EXAM_1 --判断并删除表 IF OBJECT_ID('Scores') IS NOT NULL DROP TABLE Scor ...

  10. [linux]杀死同一个应用的所有进程

    ps -ef|grep "c.py"|grep -v grep|awk '{print $2}' ps -ef|grep "c.py"|grep -v grep ...