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 入门(26) - 数据绑定: TBindingsList: TBindExprItems
Delphi XE2 之 FireMonkey 入门(26) - 数据绑定: TBindingsList: TBindExprItems 如果要给一对 "源控件" 和 " ...
- pgd 游戏教程 基地
http://www.pascalgamedevelopment.com/content.php?417-Castle-Game-Engine-6-2-released
- mooc-IDEA 收藏位置和文件--003
六.IntelliJ IDEA -收藏位置和文件(类/函数) 1.收藏自己喜欢的文件---代码 添加一个Favorites列表 定义名称 Help->Find Action... 选择Add t ...
- idea / eclipse 批量 替换 空白行
1.选择Regular expression项,允许查询匹配正则表达式 2.在Find文本框输入正则表达式:^\s*\n , 点击ReplaceAll 转移字符 含义 ^ 否 * 0个或多个 \s ...
- Eclipse查看jdk源码(Ctrl+左键)
Window ->Preferences ->Java ->Installed JREs ->选中jdk ->Edit ->选中rt.jar ->source ...
- C#中Func与Action的理解
Action 与 Func是.NET类库中增加的内置委托,以便更加简洁方便的使用委托.最初使用委托时,均需要先定义委托类型,然后定义一个符合委托类型签名的函数,在调用前,需声明并创建委托对象,将指定函 ...
- dp(买票优惠)
CodeForces - 1154F There are n shovels in the nearby shop. The i-th shovel costs ai bourles. Misha h ...
- Good number(3进制)
https://codeforces.com/problemset/problem/1249/C2 C2. Good Numbers (hard version) time limit per tes ...
- BZOJ 4552(二分+线段树+思维)
题面 传送门 分析 此题是道好题! 首先要跳出思维定势,不是去想如何用数据结构去直接维护排序过程,而是尝试二分a[p]的值 设二分a[p]的值为x 我们将大于x的数标记为1,小于等于x的数标记为0 则 ...
- 在react中用装饰器来装饰connect
假设我们在react中有如下header组件: import React, { PureComponent } from 'react'; import { connect } from 'react ...