#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函数库简单封装的更多相关文章

  1. ABP+AdminLTE+Bootstrap Table权限管理系统第七节--登录逻辑及abp封装的Javascript函数库

    经过前几节,我们已经解决数据库,模型,DTO,控制器和注入等问题.那么再来看一下登录逻辑.这里算是前面几节的一个初次试水. 首先我们数据库已经有的相应的数据. 模型和DTO已经建好,所以我们直接在服务 ...

  2. ABP+AdminLTE+Bootstrap Table权限管理系统第七节--登录逻辑及几种abp封装的Javascript函数库

    返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期         简介 经过前几节,我们已经解决数据库,模型,DTO,控制器和注入等问题.那么再来看一下登录逻辑.这 ...

  3. 我自己的Javascript 库,封装了一些常用函数 Kingwell.js

    我自己的Javascript 库,封装了一些常用函数 Kingwell.js 博客分类: Javascript javascript 库javascript库  现在Javascript库海量,流行的 ...

  4. Google图片加载库Glide的简单封装GlideUtils

    Google图片加载库Glide的简单封装GlideUtils 因为项目里用的Glide的地方比较多,所有简单的封装了以下,其实也没什么,就是写了个工具类,但是还是要把基础说下 Glide的Githu ...

  5. zlog 纯C日志函数库的简单使用方法

    zlog简述: log是一个高性能.线程安全.灵活.概念清晰的纯C日志函数库. 事实上,在C的世界里面没有特别好的日志函数库(就像JAVA里面的的log4j,或者C++的log4cxx).C程序员都喜 ...

  6. 循环 与 分支语句 和 字符函数库cctype 文件简单处理

    循环 for循环 while循环 do  while循环 通常,入口条件循环比出口条件循环好,因为循环开始前对条件进行检查 c++11基于范围的for循环    对数组(或容器类,如:vector和a ...

  7. php GD库简单使用和封装

    GD库创建图像步骤 <?php //1.创建画布 $width = 300; $height= 200; $image=imagecreatetruecolor($width,$height); ...

  8. 我对开源C++网络库简单应用总结

    网上有篇文章<开源免费的C/C++网络库(c/c++ sockets library) 七剑下天山>,看了之后觉得每个库都不错,这里我具体下载这些库看一下,简单总结一下: 顺便添加一些我找 ...

  9. python socket 实现的简单http服务器

    预备知识: 关于http 协议的基础请参考这里. 关于socket 基础函数请参考这里. 关于python 网络编程基础请参考这里. 一.python socket 实现的简单http服务器   废话 ...

随机推荐

  1. Delphi XE2 之 FireMonkey 入门(26) - 数据绑定: TBindingsList: TBindExprItems

    Delphi XE2 之 FireMonkey 入门(26) - 数据绑定: TBindingsList: TBindExprItems 如果要给一对 "源控件" 和 " ...

  2. pgd 游戏教程 基地

    http://www.pascalgamedevelopment.com/content.php?417-Castle-Game-Engine-6-2-released

  3. mooc-IDEA 收藏位置和文件--003

    六.IntelliJ IDEA -收藏位置和文件(类/函数) 1.收藏自己喜欢的文件---代码 添加一个Favorites列表 定义名称 Help->Find Action... 选择Add t ...

  4. idea / eclipse 批量 替换 空白行

    1.选择Regular expression项,允许查询匹配正则表达式 2.在Find文本框输入正则表达式:^\s*\n   , 点击ReplaceAll 转移字符 含义 ^ 否 * 0个或多个 \s ...

  5. Eclipse查看jdk源码(Ctrl+左键)

    Window ->Preferences ->Java ->Installed JREs ->选中jdk ->Edit ->选中rt.jar ->source ...

  6. C#中Func与Action的理解

    Action 与 Func是.NET类库中增加的内置委托,以便更加简洁方便的使用委托.最初使用委托时,均需要先定义委托类型,然后定义一个符合委托类型签名的函数,在调用前,需声明并创建委托对象,将指定函 ...

  7. dp(买票优惠)

    CodeForces - 1154F There are n shovels in the nearby shop. The i-th shovel costs ai bourles. Misha h ...

  8. Good number(3进制)

    https://codeforces.com/problemset/problem/1249/C2 C2. Good Numbers (hard version) time limit per tes ...

  9. BZOJ 4552(二分+线段树+思维)

    题面 传送门 分析 此题是道好题! 首先要跳出思维定势,不是去想如何用数据结构去直接维护排序过程,而是尝试二分a[p]的值 设二分a[p]的值为x 我们将大于x的数标记为1,小于等于x的数标记为0 则 ...

  10. 在react中用装饰器来装饰connect

    假设我们在react中有如下header组件: import React, { PureComponent } from 'react'; import { connect } from 'react ...