昨日不可追, 今日尤可为.勤奋,炽诚,不忘初心


前面写了一篇有关于虚幻4加载第三方库的博客思前顾后,感觉细节还是有必要拎起来注意下.

ue4自带的Fsocket用起来依旧不是那么的顺手,感觉超出了我的理解范围了.另外我也不想让我近一个礼拜研究的C++ Socket无用武之地,毅然决然的决定使用自己的C++通讯库.再美再豪华的别墅真不如自己亲手搭建的草庐来的舒畅.这就好比我表弟,要花200块钱玩一个游戏,我说,我有一个1000巅峰的大神号,我不玩了,送你吧,你不要买了.他说:不!我就要自己的号! 他梦幻没钱充点卡了,我说,我的号给你玩吧,满修满猎满技能,锦衣祥瑞无级别...第二天,他依然开着自己的号在东海湾抓大海龟...

,不说了,都是泪.

一.创建C++Socket通讯库

不要问我为什么执意要封装成库,我至今都没能摆脱那 DWORD的噩梦.

打开VS,新建空项目,新建SocketLibrary.h和SocketLibrary.cpp这两个文件,还有一个Source.def文件.

SocketLibrary.h的内容如下:

#pragma oncenamespace YJ
{//创建并且连接到服务器(in_IP地址,in_端口号,out_Socket)int CreateAndConnect(char IPAddress[256], int Htons, void*& Socket);//设置Socket为非阻塞模式;返回0:成功int Ioctlsocket(void* socket);//接收消息(in_Socket,in_数据,in_长度,in_标志位(默认0));返回实际接收到的消息长度int ReceiveMSG(void* Socket, char* Data, int Num, int Flags = 0);//发送消息(in_Socket,in_数据,in_长度,in_标志位(默认0));返回实际发出去的消息长度int SendMSG(void* Socket, char* Data, int Num, int Flags = 0);//关闭Socketint CloseSocket(void* Socket);
}
<span style="color:#009900;"><u>SocketLibrary.cpp的内容如下:</u></span>
include "SocketLibrary.h"
#include <iostream>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;namespace YJ
{//创建并且连接到服务器(in_IP地址,in_端口号,out_Socket)int CreateAndConnect(char IPAddress[256], int Htons, void*& Socket){WSADATA         Data;SOCKADDR_IN        DestSockAddress;unsigned long   DestAddress;//创建套接字(采用流式套接字)WSAStartup(MAKEWORD(1, 1), &Data);DestAddress = inet_addr(IPAddress);memcpy(&DestSockAddress.sin_addr, &DestAddress, sizeof(DestAddress));DestSockAddress.sin_port = htons(Htons);DestSockAddress.sin_family = AF_INET;  //指定地址协议族//构造socket(服务器端:构造监听流式SOCKET;客户端:构造通讯流式SOCKET)Socket = (void*)socket(AF_INET, SOCK_STREAM, 0);//连接return connect((SOCKET)Socket, (LPSOCKADDR)&DestSockAddress, sizeof(DestSockAddress));}//接收消息(in_Socket,in_数据,in_长度,in_标志位(默认0));返回实际接收到的消息长度int ReceiveMSG(void* Socket, char* Data, int Num, int Flags /*= 0*/){return recv((SOCKET)Socket, Data, Num, Flags);}//发送消息(in_Socket,in_数据,in_长度,in_标志位(默认0));返回实际发出去的消息长度int SendMSG(void* Socket, char* Data, int Num, int Flags /*= 0*/){return send((SOCKET)Socket, Data, Num, Flags);}//关闭Socketint CloseSocket(void* Socket){return closesocket((SOCKET)Socket);}//设置Socket为非阻塞模式;返回0:成功int Ioctlsocket(void* socket){int iMode = 1; //0:阻塞return ioctlsocket((SOCKET)socket, FIONBIO, (u_long FAR*)&iMode);}}

Source.def的内容如下:

LIBRARY  SocketLibrary
EXPORTS
CreateAndConnect
Ioctlsocket
ReceiveMSG
SendMSG
CloseSocket

配置好,这里我虚幻是准备打包64位的,所以我的库就要编译64位的:

OK,把SocketLibrary.dll,SocketLibrary.lib,SocketLibrary.h这三个文件拿出来放到虚幻中.(每次修改这个通讯库,都要重新编译和替换这三个文件)

--SocketLibrary.dll放到虚幻项目的Binaries>Win64里面(.dll文件要和EXE文件放在一起)

--在虚幻项目根目录下新建一个SocketLib文件夹:

--打开SocketLib这个文件夹,再新建两个文件夹:Include,Lib. 头文件.h和库文件.lib对号入座拷贝到相应目录下:

然后打开虚幻项目 : 项目名.sln; 打开:项目名.Build.cs文件:

Fill out your copyright notice in the Description page of Project Settings.
using UnrealBuildTool;
using System.IO;        //1.添加引用文件public class Text_work_10_27 : ModuleRules
{private string ModulePath{get { return Path.GetDirectoryName(RulesCompiler.GetModuleFilename(this.GetType().Name)); }}private string ThirdPartyPath{get { return Path.GetFullPath(Path.Combine(ModulePath, "../../SocketLib/")); }}public Text_work_10_27(TargetInfo Target){PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });PrivateDependencyModuleNames.AddRange(new string[] {  });//2.添加Socket通讯库头文件目录和库目录PublicIncludePaths.Add(Path.Combine(ThirdPartyPath, "Include"));PublicAdditionalLibraries.Add(Path.Combine(ThirdPartyPath, "Lib", "SocketLibrary.lib"));     }
}

这样,就能使用通讯库了.

第一部分完...




UE4 Socket多线程非阻塞通信【1】相关推荐

  1. UE4 Socket多线程非阻塞通信【2】

    昨日不可追, 今日尤可为.勤奋,炽诚,不忘初心 紧接着第一部分,别说话,勿打断我游离的思绪我们走我们走... 二.消息结构&收发队列 先不急着往下走,先捋一捋,不知道自己要干什么地走下去是一件 ...

  2. 基于MFC的socket编程(异步非阻塞通信)

    对于许多初学者来说,网络通信程序的开发,普遍的一个现象就是觉得难以入手.许多概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)等,初学者往往迷惑不清,只知其 ...

  3. Socket 实现非阻塞式多线程文件传输(jpg mov 等各种格式)

    Socket 基础 非阻塞式TCP socket 实现文件传输, 实测 传输5M的jpg , 30M的 NEF(单反原图) 以及 1G以上的mov文件,均正常接收 客户端可多开,服务器多线程实现服务器 ...

  4. 用Java实现非阻塞通信

    用ServerSocket和Socket来编写服务器程序和客户程序,是Java网络编程的最基本的方式.这些服务器程序或客户程序在运行过程中常常会阻塞.例如当一个线程执行ServerSocket的acc ...

  5. 《BIO、NIO、AIO非阻塞通信实例》

    <BIO.NIO.AIO非阻塞通信实例> NIO与阻塞式通信区别 NIO通信IO工作方式原理 AIO通信编程 AIO服务端创建过程 AIO客户端创建过程 NIO通信编程 Reactor模型 ...

  6. python3socket非阻塞_利用Python中SocketServer 实现客户端与服务器间非阻塞通信

    利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信. 首先,先了解下SocketServer模块中可供使用的类: BaseServer:包含服务器的核心功能与混合(mix-in ...

  7. [Python]再学 socket 之非阻塞 Server

    再学 socket 之非阻塞 Server 本文是基于 python2.7 实现,运行于 Mac 系统下 本篇文章是上一篇初探 socket 的续集, 上一篇文章介绍了:如何建立起一个基本的 sock ...

  8. java网络编程阻塞_Java网络编程由浅入深三 一文了解非阻塞通信的图文代码示例详解...

    本文详细介绍组成非阻塞通信的几大类:Buffer.Channel.Selector.SelectionKey 非阻塞通信的流程ServerSocketChannel通过open方法获取ServerSo ...

  9. pythontcp服务器如何关闭阻塞_利用Python中SocketServer 实现客户端与服务器间非阻塞通信...

    利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信. 首先,先了解下SocketServer模块中可供使用的类: BaseServer:包含服务器的核心功能与混合(mix-in ...

最新文章

  1. C++ Primer 5th笔记(2)chapter 2变量和基本类型:引用、const
  2. java 增量,Java增量运算符查询(++ i和i ++)
  3. 合成孔径成像算法与实现_浅析太赫兹成像技术在消防领域中的应用前景
  4. PMP知识点(三、范围管理)
  5. 【NLP】Pytorch中文语言模型bert预训练代码
  6. Http Handler 介绍(转)
  7. Openstack 与VMware 不同CPU迁移原理
  8. 第 190 场力扣周赛
  9. C语言学习笔记---浮点函数modf()和fmod()
  10. 【C++leetcode】寻找给定字符串的最大回文子串
  11. Node.js:Express
  12. 家庭洗车APP --- Androidclient开展 之 网络框架包介绍(一)
  13. 中英文停用词(stop word)列表
  14. Android开源项目第一篇——个性化控件(View)篇
  15. 数据结构 09-链表概念及常见链表结构
  16. [学习日志]UI如何与数据绑定?
  17. DNS服务器存在问题需要修复,dns服务(dns异常怎么都修复不了)
  18. 菜鸟Axios学习=官网
  19. 校园网免认证利用IPV6轻松绕过校园WiFi网关
  20. 数据库设计之网上书店系统

热门文章

  1. 橡胶支座抗压弹性模量计算公式_(完整版)橡胶支座计算
  2. 开关电源32个检测项目、检测方法与检测设备(上)
  3. 不管过去如何,未来我们都要奋力前行!
  4. 【无标题】No qualifying bean of type ‘javax.sql.DataSource‘ available: expected at least 1
  5. 杂谈 | 从刘慈欣科幻小说到元宇宙
  6. 焊接过程计算机模拟研究,焊接过程的数值模拟
  7. 压缩软件推荐(bandizip)
  8. java最大值最小值_java算法-最大值、最小值
  9. 小程序,公众号微信客服消息开发
  10. 谈谈对于百度春晚战事的看法