1. 概述:简单的基于Windows API的socket点对点聊天程序,为了方便初学者,本文代码均采用阻塞原理编写。

2. 代码样例

Server.cpp(服务端)

#include <cstdio>
#include <cstdlib>
#include <iostream>
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <Winsock2.h> using namespace std; #pragma comment(lib,"ws2_32.lib") const short HOST_PORT = 4500;
const char *HOST_IP = "127.0.0.1"; int main(void)
{
int maxConnectTimeout = 20;
char revData[255] = "\0";
sockaddr_in sain;
sockaddr_in remote_sain;
SOCKET sClient;
SOCKET sServer;
WSADATA wsaData;
int remoteLen = sizeof(remote_sain);
WORD sockVersion = MAKEWORD(2,2);
if (WSAStartup(sockVersion,&wsaData) != 0)
{
return 0;
}
sServer = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (sServer == INVALID_SOCKET)
{
printf("[-] SOCKET CREATE ERROR\n");
return 0;
}else{
printf("[*] SOCKET CREATE SUCCESS\n");
}
sain.sin_family = AF_INET;
sain.sin_port = htons(HOST_PORT);
sain.sin_addr.S_un.S_addr = INADDR_ANY; if (bind(sServer,(SOCKADDR*)&sain,sizeof(sain)) == SOCKET_ERROR)
{
printf("[-]CANNOT BIND\n");
return 0;
}else{
printf("[*]BIND SUCCESS\n");
} if (listen(sServer,5) == SOCKET_ERROR)
{
printf("[-]LISTENING ERROR\n");
return 0;
}else{
printf("[*]LISTENING SUCCESS\n");
}
while(1)
{
printf("\n[*]Listening Remote-PC ...\n\n");
sClient = accept(sServer,(SOCKADDR*)&remote_sain,&remoteLen);
if (sClient == INVALID_SOCKET)
{
printf("[-]SOCKET RECV ERROR ...");
continue;
}
printf("[+]PC from %s \n",inet_ntoa(remote_sain.sin_addr));
while (1)
{
int ret = recv(sClient,revData,255,0);
if (ret > 0)
{
revData[ret] ='\0';
printf("%s\n",revData);
}
}
closesocket(sClient);
break;
}
printf("[-]Server OFF!");
closesocket(sServer);
WSACleanup();
return 0;
}

Client.cpp(客户端)

#include <cstdio>
#include <cstdlib>
#include <iostream>
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <Winsock2.h> using namespace std; #pragma comment(lib,"ws2_32.lib") const short HOST_PORT = 4500;
const char *HOST_IP = "127.0.0.1"; int main(void)
{
int Recvret = 0;
char Sendbuff[255] = "\0";
char Recvbuff[255] = "\0";
WSADATA wsData;
WORD sockVersion = MAKEWORD(2,2);
sockaddr_in Remote_sain;
if (WSAStartup(sockVersion,&wsData) != 0)
{
printf("[-]SOCKET STARTUP ERROR\n");
return 0;
}else{
printf("[*]SOCKET STARTUP SUCCESS\n");
} SOCKET sClient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (sClient == INVALID_SOCKET)
{
printf("[-]SOCKET CREATE ERROR\n");
return 0;
}else{
printf("[*]SOCKET CREATE SUCCESS\n");
} Remote_sain.sin_addr.S_un.S_addr = inet_addr(HOST_IP);
Remote_sain.sin_port = htons(HOST_PORT);
Remote_sain.sin_family = AF_INET;
if (connect(sClient,(SOCKADDR*)&Remote_sain,sizeof(Remote_sain)) == SOCKET_ERROR)
{
printf("[-]Can not connect to the Server\n");
closesocket(sClient);
return 0;
}else{
printf("[*]Listening to %s:%d ...OK\n",HOST_IP,HOST_PORT);
} while (1)
{
if (Recvret = recv(sClient,Recvbuff,255,0) != 0)
{
Recvbuff[Recvret] = '\0';
printf("[*]Server(%s):\n",HOST_IP);
}
gets(Sendbuff);
send(sClient,Sendbuff,255,0);
printf("[*]Client:%s\n",Sendbuff);
}
closesocket(sClient);
return 0;
}

基于C++简单Windows API的socket编程(阻塞模式)的更多相关文章

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

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

  2. 使用Windows API进行串口编程

    使用Windows API进行串口编程   串口通信一般分为四大步:打开串口->配置串口->读写串口->关闭串口,还可以在串口上监听读写等事件.1.打开和关闭串口Windows中串口 ...

  3. c++之socket,阻塞模式

    这里描述下socket的阻塞模式: 首先,socket有几个函数 socket() 创建socket bind() 绑定socket到一个地址 listen() 开启soket监听 accept()  ...

  4. Python Socket单线程+阻塞模式

    Python之旅]第五篇(二):Python Socket单线程+阻塞模式 python Socket单线程 Socket阻塞模式 串行发送 摘要:  前面第五篇(一)中的一个Socket例子其实就是 ...

  5. Linux下TCP网络编程与基于Windows下C#socket编程间通信

    一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使s ...

  6. 简单理解php的socket编程

    php的socket编程算是比较难以理解的东西吧,不过,我们只要理解socket几个函数之间的关系,以及它们所扮演的角色,那么理解起来应该不是很难了,在笔者看来,socket编程,其实就是建立一个网络 ...

  7. 简单理解php的socket编程【网摘】

    php的socket编程算是比较难以理解的东西吧,不过,我们只要理解socket几个函数之间的关系,以及它们所扮演的角色,那么理解起来应该不是很难了,在笔者看来,socket编程,其实就是建立一个网络 ...

  8. 看到关于socket非阻塞模式设置方式记录一下。

    关于socket的阻塞与非阻塞模式以及它们之间的优缺点,这已经没什么可言的:我打个很简单的比方,如果你调用socket send函数时: 如果是阻塞模式下: send先比较待发送数据的长度len和套接 ...

  9. NIO Socket非阻塞模式

    NIO主要原理和适用 NIO 有一个主要的类Selector,这个类似一个观察者,只要我们把需要探知的socketchannel告诉Selector,我们接着做别的事情,当有 事件发生时,他会通知我们 ...

随机推荐

  1. GNS3通过“云”连接到虚拟机实验

    GNS3通过"云"连接到虚拟机实验并使用wireshark工具对数据分析 观看本文之前注意!!!!! 做这次实验,我所遇到的问题,会全部写在文章结尾,如果读者们遇到问题,可查看. ...

  2. 推荐模型AutoRec:原理介绍与TensorFlow2.0实现

    1. 简介 本篇文章先简单介绍论文思路,然后使用Tensoflow2.0.Keras API复现算法部分.包括: 自定义模型 自定义损失函数 自定义评价指标RMSE 就题目而言<AutoRec: ...

  3. Python 第三方登录 实现QQ 微信 微博 登录

    本人写的AgentLogin,能快速返回QQ.微信.微博第三方用户名信息,主要用于快速登录 用 pip命令安装 pip install AgentLogin 用法 : 导入这个包 from Agent ...

  4. python3中post和get请求处理

    post 请求处理 def url(): url = "www.xxx.com.cn" data = { "csrfmiddlewaretoken":" ...

  5. Azure Front Door(二)对后端 VM 进行负载均衡

    一,引言 上一篇我们讲到通过 Azure Front Door 为我们的 Azure App Service 提供流量转发,而整个 Azure Front Door 在添加后端池的时候可选的后端类型是 ...

  6. 微服务网关Zuul过滤器Filter

    Zuul本质 Zuul是一个网关,关于网关的介绍参考:亿级流量架构之网关设计思路.常见网关对比, 可知Zuul是一个业务网关, 而深入了解Zuul, 基本就是一系列过滤器的集合: Zuul的过滤器 下 ...

  7. Kubernetes 实战 —— 03. pod: 运行于 Kubernetes 中的容器

    介绍 pod P53 pod 是 Kubernetes 中最为重要的核心概念,而其他对象仅仅用于 pod 管理. pod 暴露或被 pod 使用. pod 是一组并置的容器,代表了 Kubernete ...

  8. CSS垂直布局

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  9. 官方正式发布 Java 16

    前言 就在2021/03/16,官方正式发布了Java 16.我们可以下载使用Java 16了. 特性 向量API(孵化) 在运行期,Vector 表示向量计算可以可靠地编译成支持CPU架构上的最佳矢 ...

  10. 关于Handler同步屏障你可能不知道的问题

    前言 很高兴遇见你 ~ 关于handler的内容,基本每个android开发者都掌握了,网络中的优秀博客也非常多,我之前也写过一篇文章,读者感兴趣可以去看看:传送门. 这篇文章主要讲Handler中的 ...