设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: 逸豫
打印 上一主题 下一主题

[通用发布] Socket网络编程【附RMVA工程】

[复制链接]

Lv1.梦旅人

路人党员

梦石
0
星屑
52
在线时间
2276 小时
注册时间
2010-12-30
帖子
3225
11
发表于 2014-6-28 00:55:17 | 只看该作者
本人api无能,所以弱弱地问一下,要如何用脚本拿到本机ip?==

点评

恕我无知,但是若不获取本机ip要怎么让其他的客户端知道要连接到哪(游戏内置服务器,像CS和L4D之类的),难不成要每次自行ipconfig?==  发表于 2014-7-1 18:58
listen的时候会对所有IP都进行监听,所以没必要在Server端获取本机IP,在Client端获取本机IP也没用,因为是需要连到Server端的所以需要的是Server端的公网IP  发表于 2014-7-1 18:51
真要做游戏应该不太可能用只连本机吧== lioctl没找着,倒是找到了ioctlsocket, WSAIoctl和WSANSPIoctl,请问你是指哪个?==  发表于 2014-6-29 18:33
本地使用的话本地IP可以直接使用127.0.0.1,否则的话……有个函数叫ioctl  发表于 2014-6-29 14:08
本人擅长XP,如果有脚本或者Ruby方面的问题欢迎发电邮到[email protected]咨询,本人很少检查电邮所以不一定会及时回复,本人不会直接出手解决问题只会提供一个方向,所以谢绝伸手党
回复 支持 反对

使用道具 举报

Lv3.寻梦者

宛若

梦石
0
星屑
1568
在线时间
526 小时
注册时间
2007-8-19
帖子
1493

极短24参与开拓者

12
 楼主| 发表于 2014-7-1 19:58:00 | 只看该作者
英顺的马甲 发表于 2014-6-28 00:55
本人api无能,所以弱弱地问一下,要如何用脚本拿到本机ip?==


我一直都是ipconfig来着……
  1. require("Win32API")
  2. COPY_MEMORY = Win32API.new("Kernel32","RtlMoveMemory","pii","0")
  3. def get_hostname
  4.   buf = "\0"*255
  5.   Win32API.new("ws2_32","gethostname","pi","i").call(buf,255)
  6.   return buf
  7. end
  8. def get_host(name)
  9.   buf = [0,0,0,0,0].pack("LLssL")
  10.   pointer = Win32API.new("ws2_32","gethostbyname","p","L").call(name)
  11.   COPY_MEMORY.call(buf,pointer,buf.size)
  12.   return buf
  13. end
  14. def put_ips(hostent)
  15.   buf = [0].pack("L")
  16.   ip_buf = [0,0,0,0].pack("C4")
  17.   cpp = hostent.unpack("LLssL")[-1]
  18.   COPY_MEMORY.call(buf,cpp,buf.size)
  19.   pointer = buf.unpack("L").first
  20.   while pointer != 0
  21.     COPY_MEMORY.call(ip_buf,pointer,ip_buf.size)
  22.     puts ip_buf.unpack("C4").join(":")
  23.     cpp += 4
  24.     COPY_MEMORY.call(buf,cpp,buf.size)
  25.     pointer = buf.unpack("L").first
  26.   end
  27. end
  28. put_ips(get_host(get_hostname))
  29. `pause`
复制代码
获取全部IP的代码
截图:

点评

不我并不是指在游戏中用ipconfig命令然后匹配输出,只是需要获取IP给联机的人的时候手动cmd而已。字符串匹配的话不同版本的Ipconfig输出还不同我记得  发表于 2014-7-2 13:18
顺便说我也是ipconfig,如果用那个,优雅点可以用CreateProcess+管道,或者分配了VA那种控制台再隐藏,就不会闪黑窗口了。。。  发表于 2014-7-1 21:31

评分

参与人数 1星屑 +100 收起 理由
英顺的马甲 + 100 十分感谢==

查看全部评分

[url=http://rpg.blue/thread-219730-1-1.html]http://unhero.sinaapp.com/wi.php[/url]
[color=Red]如你所见这是个死坑,没错这就是打我的脸用的[/color]
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4671
在线时间
1117 小时
注册时间
2014-5-9
帖子
163
13
发表于 2014-7-14 17:55:51 | 只看该作者
链接失效。。

点评

没有失效只是链接被墙,请自行翻墙  发表于 2014-8-13 22:03
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1939
在线时间
403 小时
注册时间
2015-8-30
帖子
395
14
发表于 2016-10-2 16:18:28 | 只看该作者
本帖最后由 有丘直方 于 2016-10-3 18:10 编辑

创建好几个NET::Socket对象是不是就可以同时联多台机器?
我想知道的是能不能让一个socket同时连接很多个IP,send的时候就可以把消息送给很多台机器了?如果不能的话就要用for in end语句给每一个机器发一个消息很麻烦。
能不能不用破墙链接放DEMO啊。
小仙女一枚~
回复 支持 反对

使用道具 举报

Lv3.寻梦者

宛若

梦石
0
星屑
1568
在线时间
526 小时
注册时间
2007-8-19
帖子
1493

极短24参与开拓者

15
 楼主| 发表于 2017-1-15 16:41:37 | 只看该作者
有丘直方 发表于 2016-10-2 16:18
创建好几个NET::Socket对象是不是就可以同时联多台机器?
我想知道的是能不能让一个socket同时连接很多个IP ...

国内DEMO下载链接:
百度云:http://pan.baidu.com/s/1o8AqgGi
七牛:http://77g811.com1.z0.glb.clouddn.com/socket.7z
服务器端只需要listen一个socket即可接受其他所有客户端传入的请求,传入请求的socket会被存储在accepted_sockets中。当然,仍然需要通过遍历各个传入请求的socket来读取/发送数据。
本SOCKET通信采用的是TCP协议,TCP协议是一种P2P协议,无法通过广播的方式传递信息。

点评

emmm评论太急没看到内容,已下载~  发表于 2018-10-31 19:13
= =前辈可以补一下链接嘛~  发表于 2018-10-31 19:12
[url=http://rpg.blue/thread-219730-1-1.html]http://unhero.sinaapp.com/wi.php[/url]
[color=Red]如你所见这是个死坑,没错这就是打我的脸用的[/color]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-21 19:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表