#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. 006-spring-data-elasticsearch 3.0.0.0使用【四】-spring-data之Elasticsearch Repositories

    续 二.Elasticsearch Repositories 2.1.简介 2.1.1.Spring命名空间 Spring Data Elasticsearch模块包含一个允许定义存储库bean的自定 ...

  2. C++中的通用结构定义,及相应的序列化、反序列化接口

    一个通用的C++结构定义如下: typedef struct tagCommonStruct { long len; void* buff; }CommonStruct_st; 此接口对应的普通序列化 ...

  3. 3 hadoop安装Standalone模式和伪分布式模式

    1 Standalone模式默认模式,即默认配置即是standalone模式装好hadoop-client,会将依赖的包安装好yum install hadoop-client配置文件各个配置文件在/ ...

  4. 快速排序 && 寻找第K大(小)的数

    参考:https://minenet.me/2016/08/24/quickSort.html 快速排序 利用分治法可将快速排序的分为三步: 在数据集之中,选择一个元素作为"基准" ...

  5. linux系统系统调优之----内核优化

    主要是指在Linux系统中针对服务应用而进行的系统内核参数调整,优化没有的标准, 根据实际需求优化才是最合适的. 1)编辑内核配置文件 2)参数及简单说明 3)生效配置 1)编辑内核配置文件 vim ...

  6. 【转载】研发应该懂的binlog知识(上)

    ---------------------------------------------------------------------------------------------------- ...

  7. Java类和对象的内存分配

    类的加载时机: 1.创建对象 2.调用类的静态成员 3.加载子类 类在实例化后的内存分配 1.每次创建对象时,都需要进行加载和创建2个操作: ① 先去判断需要的类是否已经加载,如果已经加载了,则无需再 ...

  8. QToolButton设置icon的大小

    项目中用到了QToolButton上使用图片. 如果在maindow中直接使用QToolButton,如: btnSimulate = new QToolButton; btnSimulate-> ...

  9. C++ 函数返回对象时并没有调用拷贝构造函数

    #include <iostream> #include <vector> #include <string.h> using namespace std; cla ...

  10. Python学习第四十天函数的装饰器用法

    在软件开发的过程中,要遵循软件的一些原则封装的,不改变原有的代码的基础增加一些需求,python提供了装饰器来扩展函数功能,下面说说函数装饰器用法 def debug(func):      def ...