#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. Java ——Scanner

    本节重点思维导图 import java.util.Scanner;//导包 public class Demo { public static void main(String[] args) { ...

  2. mysql5.7插入数据报错 Incorrect integer value

    mysql5.7插入字符串为空的时候取出来的值设置为null

  3. 阅读笔记12-Java 面试题 —— 老田的蚂蚁金服面试经历

    电话一面 1.自我介绍.自己做的项目和技术领域 2.项目中的监控:那个监控指标常见的哪些? 3.微服务涉及到的技术以及需要注意的问题有哪些? 4.注册中心你了解了哪些? 5.consul 的可靠性你了 ...

  4. 关于jdbc和数据库连接池的关系(不是封装的关系)

    你都说是数据库连接池了.那就是连接数据库用的.JDBC是java封装的对数据库的操作.当然你可以自己进一步封装.数据库连接池是JDBC使用的前提,如果连数据库连接池都没连上,JDBC的操作就谈不上了. ...

  5. VC调试方法大全

    VC调试方法大全 一.调试基础 调试快捷键 F5:  开始调试 Shift+F5: 停止调试 F10:   调试到下一句,这里是单步跟踪 F11:   调试到下一句,跟进函数内部 Shift+F11: ...

  6. Git利用命令行提交代码步骤

    利用命令行提交代码步骤进入你的项目目录1:拉取服务器代码,避免覆盖他人代码git pull2:查看当前项目中有哪些文件被修改过git status具体状态如下:1:Untracked: 未跟踪,一般为 ...

  7. PCB电路设计 altiumdesigner(项目软件总结)

    1.Altium designer 10在PCB里面复制粘贴,比CAD里面多一个动作,就是点击ctrl+C后,要左键点一下复制基点,比如某根线端点或者焊盘,再粘贴,就是基于刚才点的那个为基点粘贴了.2 ...

  8. CentOS7 破解登录密码

    1.重启系统,在出现下面这个界面时按e 2.进入之后方向键的下,找到“LANG=en_US.UTF-8",在这个命令后面输入“rd.break",完成之后按ctrl+x进入紧急救援 ...

  9. [BNDSOJ] 小P的数列代码

    感谢gjznb大佬的帮助Orz #include<bits/stdc++.h> using namespace std; ; vector<int> dp[N][N]; ]; ...

  10. 构造函数与new的汇编实现

    this指针,通常是通过ecx传递:gcc是通过堆栈传递的,是最后一个被压栈.传递this指针是为了访问成员变量.除了虚函数,所有成员函数被编译之后都是全局函数.mov eax,[ecx] ; 将第一 ...