socket函数库简单封装
- #pragma once
- #ifndef WINSOCK_H
- #include<WinSock2.h>
- #pragma comment(lib,"ws2_32.lib")
- #define WINSOCK_H
- #endif
- #ifndef WINDOWS_H
- #define WINDOWS_H
- #include<Windows.h>
- #endif
- #ifndef SOCK_PORT
- #define SOCK_PORT 27015 //默认端口号
- #endif
- bool GetHostInf(struct hostent* hostinf) { //获取主机信息
- char host_name[];
- if (gethostname(host_name, sizeof(host_name)) != ) {
- return false;
- }
- hostinf = gethostbyname(host_name);
- return true;
- }
- bool isIP(char *a) {
- char *b = "192.168.1.";
- for (int i = ; i <= strlen(b) - ; i++) {
- if (a[i] != b[i])
- return false;
- }
- return true;
- }
- #ifndef HOST_TEXT
- bool GetHostAddr(char *addr) {
- char host_name[] = { };
- char ip[] = { };
- char *a = ip;
- gethostname(host_name, sizeof(host_name));
- HOSTENT *host_entry = gethostbyname(host_name);
- for (int i = ; host_entry != NULL && host_entry->h_addr_list[i] != NULL; ++i) {
- sprintf(addr, "%s", inet_ntoa(*(struct in_addr *)host_entry->h_addr_list[i]));
- //strcpy_s(addr ,strlen(ip),ip);
- //printf("[IP]\t%s\n[Name]\t%s\n\n", a, host_name); //*****text*****
- if (isIP(addr)) {
- //sprintf_s(addr,strlen(a),"%s", a);
- return true;
- }
- }
- return false;
- }
- #else
- bool GetHostAddr(char *addr) {
- strcpy(addr, "127.0.0.1");
- return true;
- }
- #endif
- bool GetHostName(char *name) { //获取主机名字
- if (gethostname(name, sizeof(name)) != ) {
- return false;
- }
- return true;
- }
- bool InitSocket() //初始化sock
- {
- WSADATA wsaData;
- int err;
- err = WSAStartup(MAKEWORD(, ), &wsaData);
- if (err != ) {
- return false;
- }
- if (LOBYTE(wsaData.wVersion) != || HIBYTE(wsaData.wVersion) != ) {
- WSACleanup();
- return false;
- }
- return true;
- }
- inline void EndSock() { //结束sock
- WSACleanup();
- }
- #ifdef SOCKRUN_TCP
- bool StartListen(SOCKET *s, char *sServerIP) { //开始监听端口
- *s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- struct sockaddr_in sockaddr = { };
- sockaddr.sin_addr.S_un.S_addr = inet_addr(sServerIP);
- sockaddr.sin_family = AF_INET;
- sockaddr.sin_port = htons(SOCK_PORT);
- if (bind(*s, (SOCKADDR *)&sockaddr, sizeof(sockaddr)) == SOCKET_ERROR) {
- closesocket(*s);
- return false;
- }
- if (listen(*s, SOMAXCONN) == SOCKET_ERROR) {
- closesocket(*s);
- return false;
- }
- return true;
- }
- bool StartConnect(SOCKET *s, char *sServerIP) {
- *s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- struct sockaddr_in sockaddr = { };
- sockaddr.sin_addr.S_un.S_addr = inet_addr(sServerIP);
- sockaddr.sin_family = AF_INET;
- sockaddr.sin_port = htons(SOCK_PORT);
- if (connect(*s, (SOCKADDR *)&sockaddr, sizeof(sockaddr)) == SOCKET_ERROR) {
- closesocket(*s);
- return false;
- }
- return true;
- }
- #else
- #ifdef SOCKRUN_UDP
- bool StartListen(SOCKET *s, char *sServerIP) { //开始监听端口
- *s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- struct sockaddr_in sockaddr = { };
- sockaddr.sin_addr.S_un.S_addr = inet_addr(sServerIP);
- sockaddr.sin_family = AF_INET;
- sockaddr.sin_port = htons(SOCK_PORT);
- if (bind(*s, (SOCKADDR *)&sockaddr, sizeof(sockaddr)) == SOCKET_ERROR) {
- return false;
- }
- if (listen(*s, SOMAXCONN) == SOCKET_ERROR) {
- return false;
- }
- return true;
- }
- bool StartConnect(SOCKET *s, char *sServerIP) {
- *s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- struct sockaddr_in sockaddr = { };
- sockaddr.sin_addr.S_un.S_addr = inet_addr(sServerIP);
- sockaddr.sin_family = AF_INET;
- sockaddr.sin_port = htons(SOCK_PORT);
- if (connect(*s, (SOCKADDR *)&sockaddr, sizeof(sockaddr)) == SOCKET_ERROR) {
- closesocket(*s);
- return false;
- }
- return true;
- }
- #endif
- #endif
socket函数库简单封装的更多相关文章
- ABP+AdminLTE+Bootstrap Table权限管理系统第七节--登录逻辑及abp封装的Javascript函数库
经过前几节,我们已经解决数据库,模型,DTO,控制器和注入等问题.那么再来看一下登录逻辑.这里算是前面几节的一个初次试水. 首先我们数据库已经有的相应的数据. 模型和DTO已经建好,所以我们直接在服务 ...
- ABP+AdminLTE+Bootstrap Table权限管理系统第七节--登录逻辑及几种abp封装的Javascript函数库
返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期 简介 经过前几节,我们已经解决数据库,模型,DTO,控制器和注入等问题.那么再来看一下登录逻辑.这 ...
- 我自己的Javascript 库,封装了一些常用函数 Kingwell.js
我自己的Javascript 库,封装了一些常用函数 Kingwell.js 博客分类: Javascript javascript 库javascript库 现在Javascript库海量,流行的 ...
- Google图片加载库Glide的简单封装GlideUtils
Google图片加载库Glide的简单封装GlideUtils 因为项目里用的Glide的地方比较多,所有简单的封装了以下,其实也没什么,就是写了个工具类,但是还是要把基础说下 Glide的Githu ...
- zlog 纯C日志函数库的简单使用方法
zlog简述: log是一个高性能.线程安全.灵活.概念清晰的纯C日志函数库. 事实上,在C的世界里面没有特别好的日志函数库(就像JAVA里面的的log4j,或者C++的log4cxx).C程序员都喜 ...
- 循环 与 分支语句 和 字符函数库cctype 文件简单处理
循环 for循环 while循环 do while循环 通常,入口条件循环比出口条件循环好,因为循环开始前对条件进行检查 c++11基于范围的for循环 对数组(或容器类,如:vector和a ...
- php GD库简单使用和封装
GD库创建图像步骤 <?php //1.创建画布 $width = 300; $height= 200; $image=imagecreatetruecolor($width,$height); ...
- 我对开源C++网络库简单应用总结
网上有篇文章<开源免费的C/C++网络库(c/c++ sockets library) 七剑下天山>,看了之后觉得每个库都不错,这里我具体下载这些库看一下,简单总结一下: 顺便添加一些我找 ...
- python socket 实现的简单http服务器
预备知识: 关于http 协议的基础请参考这里. 关于socket 基础函数请参考这里. 关于python 网络编程基础请参考这里. 一.python socket 实现的简单http服务器 废话 ...
随机推荐
- Delphi XE2 之 FireMonkey 入门(25) - 数据绑定: TBindingsList: 表达式的灵活性及表达式函数
Delphi XE2 之 FireMonkey 入门(25) - 数据绑定: TBindingsList: 表达式的灵活性及表达式函数 绑定表达式中可以有简单的运算和字符串连接, 但字符串需放在双引号 ...
- shell习题-输入数字执行对应命令
要求: 写一个脚本实现如下功能:输入一个数字,然后运行对应的一个命令.显示命令如下:*cmd meau** 1—date 2–ls 3–who 4–pwd当输入1时,会运行date, 输入2时运行l ...
- 测开之路八十七:HTML之a标签的用法
初始化的HTML结构为,只需要在body里面加网页的标签和要显示的内容即可 <!DOCTYPE html><html lang="en"><head& ...
- 多线程threading初识,线程等待
1.线程是程序里面最小的执行单元. 2.进程是资源的集合. 线程是包含在进程里面的,一个进程可以有多个线程,但只要要有一个线程. 一.多线程,就是N个线程一起干活: 1.传统方式,串行,循环5次需要1 ...
- 应用安全 - PHPCMS - Joomla漏洞汇总
Joomla 反序列化(版本低于3.4.5) CVE-2015-8562 RCE Date:October, 2019原理:https://blog.hacktivesecurity.com/inde ...
- DevOps的前世今生
From今日头条:https://www.toutiao.com/a6534660729453150723/?tt_from=weixin&utm_campaign=client_share& ...
- 使用SqlBulkCopy 批量操作大量数据
private void button1_Click(object sender, EventArgs e) { //1.0 构建一个内存表一定要和Users表的结构保持一致,除了自增的主键外 Dat ...
- Ansible安装配置(CentOS 7)
Ansible 中的概念 任务 Task——多个 Task 顺序执行,在每个 Task 执行结束可以通知 Hanlder 触发新操作. 变量 Variable——用户定义的变量. 环境 Facts—— ...
- 使用xmake优雅地描述工程
描述语法 xmake的描述语法基于lua实现,因此描述语法继承了lua的灵活性和简洁性,并且通过28原则,将描述作用域(简单描述).脚本作用域(复杂描述)进行分离,使得工程更加的简洁直观,可读性非常好 ...
- 单片机BootLoader
http://bbs.elecfans.com/jishu_467138_1_1.html 作用:app程序,固件程序升级