游戏编程入门学习笔记17——网络篇——显示本机IP
沉寂好多天,总算有了进展。
上回说了,要加入网络对战功能。猪哥在这方面是一窍不通,首先肯定是要去找些资料来学习。搜搜关键词socket、winsock、windows网络编程,入门文章还是一大把的,但这些小文章都讲得不清不楚的,懂的不用看,不懂的还是看不懂。这里推荐两本书:
1、《Windows网络编程(第二版)》 Network Programming For Microsoft Windows 中英文都有电子版
就像directx是多媒体API,所谓winsock也就是一个网络API。最了解自己孩子的肯定是父母,两位作者本身都在微软干这个,所以看他们写的书没错啦。
2、《PC游戏编程(网络游戏篇)》 03年中国人写的,讲了很多实战经验。有了技术基础后把这本作为补充很不错。
至于其他小文章,只能用于回顾。
各种资料大致翻了一遍之后,肯定是一头雾水,不亲手编几行代码必然还是一无所获。
大致计划了一下,我只要实现一个目的:能够让两个人通过TCP/IP互联对战。至于能不能有一个网络服务器或是局域网对战,暂时抛在一边。
具体的第一个目标设置得更简单,就是显示本机IP地址。
结果一进入实际操作就发现好多基本问题没弄明白,这里一一记录下来理出个头绪,争取接下来把这些头疼的小问题都搞清楚,帮助一定很大。
如何显示本机IP小文章有很多,我随便参考一篇来研究http://blog.csdn.net/kingliujian/article/details/795972
直接将它的代码拷进编译器,作一些必要的添加修补,比如加winmain()等,编译!
出现错误若干。
我看了下,发现CString这个词很陌生,百度之,原来属于MFC里头的一个什么类之类的,MFC我也不懂啊,木办法,试着添加#include ''afx.h''。(知识盲点一:MFC)
关于MFC这里插着说几句,其实我在学winsock过程中就想到这个问题,至少要提供一个输入框给游戏者输入试图连接的主机IP啊!不过不想分散精力学一个东西到一半时又去学另一个重量级相同的玩意,总有替代方法的,所以MFC计划留到整个网络功能实现得差不多后再研究。
再编译错误就只剩一个了:fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
之前搞动态静态编译的时候涉及到过这个选项,但是实在搞得不是很清。(知识盲点二:VS2008的一些设置细节)
我又试着添加#define _AFXDLL
这次原来的错误没了,不过出来个新的,提示windows.h重复出现。我有点没辙了,打算想其他路子。(知识盲点三:如何查看头文件)
于是我考虑,能否对CString来个替换?大致能理解就是定义一个字符串数组盛放获取到的IP地址,我尝试用char *来替换,因为我之前知道函数传递字符串时实际传递的是首字符的指针。也不搞多个地址那么麻烦,我只需要得到一个就行。
ip赋值的那句话是不需要修改的,再次编译提示MessageBox()参数不能只有1个。于是我百度了下,并参考之前我的那个游戏代码中MessageBox的用法,将参数补到4个。这时提示第二个参数不是LPCTSTR型,于是我很虎比的来了个LPCTSTR()强制转换,就算我完全不知道LPCTSTR是个什么概念...这次通过了,不过还报错第三个参数类型有误。很奇怪的是同样的用法原来好好地现在就不行。我怀疑是缺乏某个宏定义,所以索性将整个程序直接添加进了游戏项目中。(知识盲点四:MessageBox()的用法)
还是不行,错误又变了,这次提示n多个“error LNK2019: 无法解析的外部符号”,我大概猜出是没有包含ws2_32.lib,于是试着在编译器设置中添加lib路径,还是不行。最终还是百度出的解决办法http://blog.sina.com.cn/s/blog_51890fea0100l41i.html(同知识盲点二)
之后终于神奇的编译成功了,然后我运行程序,如愿得到了一个显示本机IP的提示窗,地址同在cmd里用ipconfig查看的结果相符。
就这样,终于东撞西撞的迈出了网络编程的第一小步。
万事开头难,我想耐心把这些问题弄懂,再往后的工作不说势如破竹至少坡度也不会像一开始这么陡了。
附:
VC中release和debug版本的区别?
http://zhidao.baidu.com/question/292315594.html
Multi-Byte Character Set & Use Unicode Character Set
http://blog.csdn.net/Jackiezhw/article/details/3901685
VC运行时库(/MD、/MT等)
http://www.cnblogs.com/xiongjiaji/archive/2011/06/01/2476508.html
msdn(据说很有用,我怎么死活找不到想要的东西。。)
http://msdn.microsoft.com/zh-cn/library/aa468084.aspx
#pragma comment(lib, "ws2_32.lib") 意义
http://blog.csdn.net/jungzhang/article/details/4558464
(注:仅仅是在编译器设置了各种文件的路径是不够的,还要将文件添加进项目来)
VS编译错误:mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file
http://blog.csdn.net/chenyujing1234/article/details/7789597
游戏编程入门学习笔记17——网络篇——显示本机IP相关推荐
- Python快速编程入门#学习笔记01# |第一章 :Python基础知识 (Python发展历程、常见的开发工具、import模块导入)
全文目录 ==先导知识== 1 认识Python 1.1.1 Python的发展历程 1.1.2 Python语言的特点 2. Python解释器的安装与Python程序运行 1.2.1 安装Pyth ...
- 01.Java 编程入门学习笔记20210307
Java 编程入门学习笔记-day01 第0章:编程入门 1.计算机的概述 计算机 = 硬件 + 软件 1.1硬件:冯诺依曼体系 CPU: CPU的衡量标准:速度的计量单位是赫兹(Hz),1Hz相当于 ...
- 【D3D11游戏编程】学习笔记十八:模板缓冲区的使用、镜子的实现
(注:[D3D11游戏编程]学习笔记系列由CSDN作者BonChoix所写,转载请注明出处:http://blog.csdn.net/BonChoix,谢谢~) 模板缓冲区(Stencil Buffe ...
- 原创 OpenCV3编程入门 学习笔记(总)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_36163358/article/ ...
- Python快速编程入门#学习笔记03# |第二章 :Python基础(代码格式、标识符关键字、变量和数据类型、数字类型以及运算符)
全文目录 ==先导知识== 学习目标: 2.1 代码格式 2.1.1 注释 2.1.2 缩进 2.1.3 语句换行 2.2 标识符和关键字 2.2.1 标识符 2.2.2 关键字 2.3 变量和数据类 ...
- OpenCV3编程入门 学习笔记(总)
OpenCV3编程入门 学习笔记 2018.12.12-2018.12.29 此博客为在看过毛星云版<OpenCV3编程入门>后所总结的一本笔记,可供复习使用. 文章目录 OpenCV3编 ...
- 【D3D11游戏编程】学习笔记十一:基本几何体绘制
(注:[D3D11游戏编程]学习笔记系列由CSDN作者BonChoix所写,转载请注明出处:http://blog.csdn.net/BonChoix,谢谢~) 这次我们来学习几种常见的基本几何体的绘 ...
- 【D3D11游戏编程】学习笔记九:编译Effect的方法
(注:[D3D11游戏编程]学习笔记系列由CSDN作者BonChoix所写,转载请注明出处:http://blog.csdn.net/BonChoix,谢谢~) 在D3D11应用程序中,对于写好的Ef ...
- 【D3D11游戏编程】学习笔记七:3D渲染管线
(注:[D3D11游戏编程]学习笔记系列由CSDN作者BonChoix所写,转载请注明出处:http://blog.csdn.net/BonChoix,谢谢~) 3D图形学研究的基本内容,即给定场景的 ...
- Opencv3编程入门学习笔记(五)之通道分离(split)与合并(merge)
若要对Opencv中(BGR)颜色通道进行单一处理,那必然会涉及到通道分离(split)与合并(merge).那么本篇博客笔者记录了两个方法的使用方法和案例.案例来源于<Opencv3编程入门学 ...
最新文章
- 博士生起诉学校,因核心期刊发文数不够申请学位被拒,一审判决胜诉!
- eplise怎么连接数据库_如何通过eclipse连接到mysql数据库
- 导出对象_从代数几何到导出代数几何:形变与逼近
- html5决战沙城源码,决战沙城h5符文玩法介绍 怎么获得完美首通
- 201112阶段二qt图形视图框架
- C#学习笔记——通用对话框
- Python自动化运维之常用模块—logging
- 大量违规投放,青桔单车被紧急约谈
- 2020运动相机推荐_2020年优秀户外运动相机推荐
- netty如何知道连接已经关闭,socket心跳,双工?异步?
- 使用readLine()方法遇到的坑
- VS 2015专业版密钥
- C#租房管理系统(课程设计)
- Android卡顿掉帧问题分析之实战篇
- html的特殊符号五角星,五角星怎么打出来?打出五角星符号的方法
- windows系统用cmd命令开启WiFi共享功能
- Soul聊天记录备份和恢复(旧机迁移至新机)
- 数据防泄密(DLP)系统
- OpenStack Swift Architecture
- maven surefire的executions配置
热门文章
- 雪豹学院主办“2019年《ASM敏捷大咖》见修系列公开课”深圳宝安站活动圆满结束
- android开发 页面关闭时,关闭软键盘
- 基于python的客流统计_基于深度学习的客流量统计方法
- 深信服虚拟服务器设置ip,深信服网关怎么设置端口映射
- android判断网络类型5G,iOS中如何判断当前网络环境是2G/3G/4G/5G/WiFi
- 分享给学弟学妹们的一些成为全栈工程师的方向和方法
- Python 日历模块 calendar
- python里value是什么意思_关于Python 字典里的value
- JavaScript系列之去掉字符串前后的空格
- 俞敏洪+马云+牛根生+史玉柱经典语录