Articles of 套接字

统一的TCP Socket通信

我正在与PC应用程序沟通统一应用程序。 因为我不知道如何统一套接字编程。任何人都可以帮助我创建一个简单的小应用程序使用TCP套接字与团结

SocketException:由于目标机器主动拒绝,所以不能建立连接

我正在使用套接字连接将客户端连接到服务器。 我有一个button,当我点击button时,它在Unity中给出下面的例外。 “SocketException:由于目标机器主动拒绝,所以不能建立连接。” 。 这将是什么问题? 可以帮助我吗? 以下是我为连接到服务器而编写的代码: internal Boolean socketReady = false; NetworkStream theStream; StreamWriter writer; StreamReader reader; try{ connect = new TcpClient (host, port); theStream = connect.GetStream (); writer = new StreamWriter (theStream); reader = new StreamReader (theStream); return true; //socketReady = true; } catch(ObjectDisposedException) { return false; }

Unity WebGL构建会引发错误

我正在为WebGL平台开发多人游戏,并使用SocketIo&node.js服务器来处理游戏。 我正面临着问题,如附图所示。 我不知道这些错误是什么意思。 我不认为这个问题来自我的编码方面,因为我的多人游戏在独立版本中完美运行,并且运行了超过4个独立版本的实例。 它甚至不会在我的WebGL版本中打开。 WebGL不支持线程吗? 这些错误都是关于什么的? 这些问题可以解决,还是我必须改变我的整个项目实施?

点对点networking架构能否适合我的格斗游戏?

我期待开发一款2D飞船战斗游戏 ,我对此有如此多的想法。 无论如何,我将会制作一个单人游戏组件,但这个游戏的核心肯定是它的多人游戏。 对于这个游戏,我受到Brawlhalla及其充满活力的游戏风格的启发 。 在我的游戏中,必须有实时动作function,如攻击,躲闪,被击中,死亡,所以一个可靠的networking需要存在。 我曾经想过一个客户/服务器体系结构,但是在我看来,对等连接在我看来更容易实现。 我已经阅读了这篇文章,这对我继续使用这个模拟解决scheme来说是令人鼓舞的。 让我来形容我的概念: 客户端初始化一个房间,然后使用套接字,IP,端口和其他玩家连接到他之后。 因此,总有一个主客户端处理新的连接,并向其他客户端发送关于新的现有播放器的信号。 然后,当游戏运行时,字节数据包将stream入每个玩家的input,他的位置,他的轮船,他的船状态等等,以便其他每个客户端可以对初始客户端进行完美的模拟。 换句话说,这个数据包将触发每个客户端上的所有操作。 作为networking协议,我在考虑TCP / IP,如果有人愿意以更实际的方式向我解释这个和UDP的区别,我会很感激。 我甚至计算了需要一秒钟传输多less数据:假设一个byte [256]数组一次保存所有数据乘以每秒的调用次数( 约32次 )乘以客户端数量应将数据广播到( 3-4 )结果约32kb / s 。 这可能是一个虚拟的结果,我可能留下了很多东西,但是,我已经准备好学习了。 作为一个说明,我现在不打算在这个时候制作一个专业的多人游戏系统,但是我想更多地了解这个应用程序的编程部分,我认为这是一个非常好的项目想法来提高我的技能。 当然,我对任何先进的技巧,解决scheme,材料都是开放的,我应该添加一些关于我的概念的东西,请让我知道。 我的理论模型到目前为止如何?

多人游戏数据序列化问题

我想创建一个简单的游戏,可以玩一到两个玩家。 我打算使用TCP套接字,Farseer Physics,XNA,BinaryFormater和Memorystream。 据我所知,我不能在两个客户端上做物理,否则你最终会失去同步。 所以我的想法是在主机端做物理,然后把Farseer World的数据发送到另一个客户端,但是它是不可序列化的,我也意识到这是大量的数据发送每个滴答。 我可以将玩家动作发送回服务器,然后发送一个Texture2D到客户端进行绘制,但是Texture2D也是不可序列化的。 它已经明白了我必须做这个完全错误的。 但这是我如何试图发送数据: [Serializable()] class ServerData { public Texture2D Test; public Vector2 Test2; } static void SendData() { byte[] DataBuffer = null; MemoryStream stream = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); NetworkStream netStream = PlayerOneSocket.GetStream(); ServerData ServerDataToSend = new ServerData(); formatter.Serialize(stream, ServerDataToSend); DataBuffer = stream.ToArray(); netStream.Write(DataBuffer, 0, DataBuffer.Length); […]

为什么我的客户端迟迟不了60个更新数据包?

我正在开发与XNA的小型多人游戏。 这是一个通常的客户端 – 服务器架构 – 我有一个服务器和许多客户端通过UDP通信(通过.NET的Socket类)。 这些客户端将数据发送到服务器(例如,玩家的位置),服务器处理它并决定要做什么(将其发送给每个其他客户端或丢弃它)。 将移动对象的位置从客户端发送到服务器的最有效的“正确”方式是什么? 目前,在玩家移动的同时,我会将客户端的ID和玩家位置每秒发送60次(XNA的默认更新速率)。 当我在屏幕上看到我自己的播放器时,它移动得非常顺利,但其他的则不然,尽管每个客户端都有相同的更新速率。 我究竟做错了什么?

通过套接字延迟命令执行

我一直在试图修复游戏循环实时(滴答延迟)MUD。 我意识到使用Thread.Sleep在用户通过select客户端(Zmud等)(例如east,south,southwest )的垃圾邮件命令时会显得很笨重,然后等待三个move ticks,然后输出以前的几个房间的所有内容。 游戏循环基本上在每个打勾期间(50ms)为每个套接字调用一次Flush和Fill方法, private void DoLoop() { Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); while (running) { // for each socket, flush and fill ConnectionMonitor.Update(); stopWatch.Stop(); WaitIfNeeded(stopWatch.ElapsedMilliseconds); stopWatch.Reset(); } } Fill方法触发命令事件,但如前所述,它们当前阻塞使用Thread.Sleep 。 我试图给状态对象添加一个“准备好”标志,试图执行命令以及一系列垃圾邮件命令,但是它最终执行一个命令并排队,即每个后续命令执行一些排队的命令之前已经执行了。 我必须错过关于计时器的事情。 private readonly Queue<SpammedCommand> queuedCommands = new Queue<SpammedCommand>(); private bool ready = true; private void TryExecuteCommand(string input) { var commandContext = […]

在Unity中连接到服务器的延迟

我有一个button,当我按下连接button,它连接到服务器。 当我再次按下连接button时,延迟连接到服务器。 以下是连接到服务器的代码: public void setupSocket() { try { socket = new Client(Host, Port); theStream = socket.GetStream(); theWriter = new StreamWriter(theStream); theReader = new StreamReader(theStream); socketConnect = true; } catch (Exception e) { Debug.Log("Socket error:" + e); } } 而且我还有一个问题。 当我拿起应用程序的桌面版本,打开应用程序,点击button,它连接到服务器,但是当我再次单击button时,它没有连接。 但是,当我closures应用程序,它显示连接消息,并closures消息在服务器上。 进行桌面构建时是否需要设置? 任何人都可以帮忙解决问题吗?

通过.NET套接字同步对象状态

我想实现的是使用套接字同步两个应用程序之间的对象列表的状态。 我所有的尝试,但失败了。 我的方法之一是将每个对象每次更新发送到客户端,这显然是一个带宽问题,我非常局限于我可以发送的对象的数量,因为我发送一个UDP数据包中的所有对象。 我很清楚,我需要将所有游戏对象发送到客户端,然后只更新服务器端更改的字段。 我之所以没有尝试这种方法,是因为我发现了一些障碍。 我的对象被序列化,并希望同步每个属性。 如何检测属性的更改,而无需在外部实现更改事件,以及inheritance我的主实体类的所有对象。 对象的属性的每个属性被改变每一帧,所以当我将更改应用到客户代表对象时,它需要很多的处理,因为我需要find每个属性,我需要从对象更改,并为其分配新的价值。 每个对象都有需要同步的组件。 这些组件在每个游戏对象中包含的列表中。 所以我不仅要简单地同步对象的属性,而且要同时对每个组件的属性进行同步。 一个属性可以多次改变每一帧,我只想同步帧的最后的属性设置的最后一个值。 我目前不知道如何实现这个方法。 我的第一种方法是有效的,但根据我的理解,这不是最佳方法。 请任何小的暗示或意见可以有助于制定答案。 提前致谢。

LibGDX项目中的Node.js

我正在开发与LibGDX游戏,现在我正在尝试多人游戏的一部分。 我已经设法通过Node.js和socketIO连接了几个玩家,但是当我试图让游说时,我怀疑使用这个是否正确。 我已经读过,它是面向Web应用程序,所以我的问题是:它是可取的使用Java? 我应该改变它吗? 谢谢你的阅读和原谅我的坏英语。