完美者(wmzhe.com)网站以软件下载为基础,改版后的网站对功能性板块进行扩充,以期能够解决用户在软件使用过程中遇见的所有问题。网站新增了“软件百科”、“锦囊妙技”等频道,可以更好地对用户的软件使用全周期进行更加专业地服务。
NetworkConnectLog是一个非常简单好用的网络连接记录器。NetworkConnectLog启动后会反复扫描您的局域网(使用ARP和NetBIOS协议),并添加一个新的记录行,每次一个新的计算机或设备连接到您的网络,计算机或设备时,连接/断开后,你可以很容易地导出日志到comma-delimited/tab-delimited/html/xml文件。
"锦囊妙技"栏目是聚合全网软件使用的技巧或者软件使用过程中各种问题的解答类文章,栏目设立伊始,小编欢迎各路软件大神朋友们踊跃投稿,在完美者平台分享大家的独门技巧。
本站文章素材来源于网络,大部分文章作者名称佚失,为了更利于用户阅读和使用,根据需要进行了重新排版和部分改编,本站收录文章只是以帮助用户解决实际问题为目的,如有版权问题请联系小编修改或删除,谢谢合作。
软件大小:307.89 KB
直接继承自 MonoBehaviour, 还有就是被设计成了单例 singletonNetworkManager 网络管理器是一个方便的HLAPI 类,用于管理网络系统 。对于简单的网络应用NetworkManager 网络管理器可以使用HLAPI控制 。它提供了简单的方法来 启动和停止 客户端和服务器,以及 管理场景,而且具有虚拟函数,用户代码可以使用 实现 网络事件的处理程序。NetworkManager 网络管理器一次处理一个客户端。下面的示例演示一个最小的网络设置。using UnityEngine.Networking;public class Manager : NetworkManager {public override void OnServerConnect(NetworkConnection conn){Debug.Log ("OnPlayerConnected");}}NetworkManager 网络管理器是 管理网络状态的多人游戏的一个组成部分。它实际上被实现完全使用 HLAPI,所以它做的一切都是可被其他forms的开发人员使用的。然而网络管理器包装了很多有用的功能,使得创建、 运行和调试尽可能简单的多人游戏。网络管理器可以使用完全不用脚本。它有在编辑器中有 inspector 控件,允许配置其所有功能,和 NetworkManagerHUD 提供简单、默认的用户界面,可以在运行时允许被用户控制的网络游戏。为高级的使用,开发人员可以从网络管理器派生出类 并通过重写虚函数,为它提供的任何自定义其行为。网络管理器的功能包括:• Game State Management• Spawning Management• Scene Management• Debugging Information• Matchmaking 匹配系统• Customization 可定制入门 NetworkManager网络管理器可以作为控制组件的多人游戏的核心。若要开始,在你开始的场景,创建一个空的游戏对象或挑选一个方便管理器对象。从Network/NetworkManager菜单项,然后添加NetworkManager组件。新添加的NetworkManager应如所示:在编辑器中的NetworkManager的的inspector 面板上 允许您配置和控制与网络相关的很多东西。NetworkManagerHUD 是与NetworkManager相关的的另一个组件。游戏运行控制网络状态时,它给你一个简单的用户界面。这是很好的入门知识网络项目,但不能用作游戏最终的 ui 设计。NetworkManagerHUD 看起来像:真正的游戏会有正确的UI ,用于控制游戏状态 和 允许玩家选择什么样的游戏 。但是,若要开始,我们可以暂时以此来控制游戏。Game State Management作为客户端,作为一个专用的服务器,或作为 “Host” 是客户端和服务器在同一时间具备 ,UNet 多人游戏可以在三种模式下-运行。UNet 旨在使相同的游戏 代码和资产 在所有这些情况下工作。发展为 单人游戏版本游戏和 多人游戏版本游戏 应该是同一件事。网络管理器 具有用于输入每一种模式的方法。NetworkManager.StartClient()、 NetworkManager.StartServer() 和 NetworkManager.StartHost() 是所有可用的脚本代码,所以它们可以被调用,从键盘输入的处理程序或自定义UI 事件 。可以选择要显示的默认运行时控件也调用这些相同的功能。也有按钮在 NetworkManagerHUD 的 inspector上,在Play 模式时调用同一函数:无论哪种方法用来 改变游戏状态、 networkAddress网络地址和 networkPort网络端口 属性被 使用。当启动时后的服务器 或主机 时,networkPort 成为 侦听端口。当客户端启动时,networkAddress是要连接到的地址、networkPort 是要连接到的端口。Spawning Management网络管理器可以用于管理网络对象从预置的实例化 。大多数游戏都有 prefab 用作player 的对象,因此网络管理器有一个 槽(字段),拖动player prefab进行赋值。当一个player prefab 设置时,player 对象会自动产生从该prefab, 为每个用户在游戏中创建。这适用于在本地player托管hosted服务器上,和远程客户端上的远程players 参与者。请注意player prefab 必须有 NetworkIdentity 组件。除了player prefab,其他对象的预置将动态地被生成了但是必须是ClientScene登 记的。这可以通过使用 ClientScene.RegisterPrefab() 函数,或者它可以由网络管理器自动完成。添加 预置生成列表 会使他们自动注册。NetworkManager的 inspector 的字段 配置看起来像:一旦设置了一个player prefab ,你应该能够作为主机开始游戏,看到 player 对象产生。停止这场比赛应该使player 对象被销毁。当要运行另一个副本的游戏和 连接到本地主机的客户端应使另一个player 对象出现,并停止该客户端应该使该客户端player 对象被销毁。player object 被被生成是由 NetworkManager.OnServerAddPlayer 默认实现。 如果你想自定义 player object 的创建的方式,你可以重写的虚函数。默认实现是类似:public virtual void OnServerAddPlayer(NetworkConnection conn, short playerControllerId){var player = (GameObject)GameObject.Instantiate(playerPrefab, playerSpawnPos, Quaternion.identity);NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);}请注意,新创建player object.时NetworkServer.AddPlayerForConnection() 必须被调用函数,所以它是被生成和与客户端的连接相关联。这将产生的对象,所以 NetworkServer.Spawn 不需要为 player object.Start Positions若要控制players 被创建,在这里,你可以使用 NetworkStartPosition 组件。网络管理器查找场景中的 NetworkStartPosition 对象,如果它找到了,然后它将产生Player的位置和方向 。自定义代码可以通过NetworkManager.startPositions列表 ,访问可用的 NetworkStartPositions,也是一个 helper 函数 GetStartPosition() 对网络管理器,可以在执行 OnServerAddPlayer 用于查找起始位置。Scene Management大多数游戏都有多个场景。在至少有通常是标题屏幕 或 开始菜单场景 还有玩这个游戏的场景。网络管理器是设置来自动管理场景状态 和 场景切换 适合多人游戏的方式。网络管理器的属性面板 有两个插槽: offlineScene 和 onlineScene。将 场景对象拖放到这些插槽 激活网络场景管理。服务器或主机启动时,将加载online在线的场景。这将会成为当前的网络场景。连接到该服务器的任何客户端将奉命加载这个场景。这个场景的名称存储在 networkSceneName 属性中。当网络停止时,通过停止的服务器或主机,或断开连接,客户端将加载offline脱机的场景。断开多人游戏时游戏允许自动返回到菜单场景 。通过调用 NetworkManager.ServerChangeScene(),游戏处于活动状态时,还可以更改场景。这将使所有当前连接的客户端更改场景,并将更新 networkSceneName,新客户还将加载新的场景。虽然网络的场景管理处于活动状态,调用任何游戏状态管理功能 NetworkManager.StartHost() 或 NetworkManager.StopClient() 可导致场景变化。这适用于运行时控制 UI。所以通过设置场景 并调用这些函数很容易控制流的多人游戏。注意,场景变化导致的所有对象在场景将被销毁。这可能包括网络管理器! 如果你想要网络管理器在转换是不被销毁,那就确保 “Dont Destroy On Load” 属性被设置为 true。在简单的情况下,这是最佳配置。但是,它是可能有网络管理器在每个使用不同的设置,以控制增量的预制加载或不同的场景切换的场景。Debugging InformationNetworkManagerHUD 属性面板在运行时显示有关网络状态的其他信息。这包括:• 网络连接• 激活 NetworkIdentity 服务器对象• 激活 NetworkIdentity 客户端对象• client peers另外,预览 窗口中显示所注册的客户端消息处理程序。Matchmaking匹配系统网络管理器在运行时 用户界面和网络管理 inspector UI 允许与匹配服务的交互。NetworkManager.StartMatchmaker() 函数作为匹配接口,并填充具有一个 NetworkMatch 对象的 NetworkManager.matchmaker 属性。一旦这是激活的默认 Ui 使用它和 回调函数对网络管理器让您执行简单配对。有虚拟派生类的网络管理器的函数 可以使用自定义的 respoding 给matchmaker回调的行为。
做三维动画的人都知道,渲染是一项费时的工作,特别是当动画制作得很复杂,生成时的计算量非常大时。3D Studio MAX 软件提供了网络渲染的功能,使我们能利用网络上多台工作站同时进行渲染,分担任务,节约时间。下面我们以3D Studio MAX 3.x版本为例进行说明。 一.网络要求 1.首先参与渲染的工作站的操作系统须为NT4.0,3D Studio MAX 3.x虽然能在Windows98上运行,但是在Win98上不支持网络渲染。 2.工作站连接在同一局域网中,使用TCP/IP协议,IP设置在同一网段,例如:10.10.4.21,10.10.4.22,10.10.4.23……。并定义其中一台为“主机”,就是最后调max文件进行网络渲染的那台。记下IP,假定为10.10.4.21。 3.在网络中共享一定大小的磁盘,必须各工作站皆可进入、可读写。把要渲染的max文件、贴图等拷贝至该磁盘。网络渲染的结果也将存储在此。 4.要注意的是,各工作站的标识必须以字母开头,不能以数字开头;另外,查3DS MAX3目录下有否Network文件夹,如有则删除。 二.在“主机”设置Manager和Server 1.在3DS MAX3文件夹下有Manager.exe和Server.exe两个程序,为方便运行,分别在NT 桌面上建立快捷方式图标。 2. 双击Manager快捷图标,运行Manager.exe。点logging按钮,在“Log To Screen”项下把Debug选项选上,让Manager显示工作状态。如图1。 3. 双击Server快捷图标,运行Server.exe。点Properties,在“Manager Name or IP Address”项里填上“主机”IP,如上面所假设的:10.10.4.21,并把Automatic取消,如图2,确定后关闭Server。再次启动Server,点logging按钮,在“Log To Screen”项下把Debug选项选上,同样也是为了监视Server的工作状态。设置好后数秒系统会开始尝试寻址连接。 4. 在其他NT工作站重复1~3项,注意“Manager Name or IP Address”项里的地址必须统一,即都是“主机”地址(10.10.4.21)。 图1 图2 三. 进行网络渲染 1. 在分担渲染任务的所有工作站上运行Manager.exe及Server.exe。 2. 在“主机”上打开3D Studio MAX程序,选共享磁盘空间里欲渲染的动画。执行菜单Rendering\Render。点“Render Output”的File按钮,指明生成动画的共享存储路径。然后选中Net Render项。如图3. 3. 按Render钮,弹出对话框“Network Job Assignment”。输入“Job Name”,在“Network Manager”下输入统一的IP地址(10.10.4.21)后Connect。连接成功会在列出所有可协同作业的工作站,以绿圆点显示。选All按钮,然后Submit。至此,网络渲染开始进行。如图4。 4. 可在“主机”上退出3D Studio Max,并不影响渲染。也可以中途退出渲染,下次只要重启Manager和Server,作业会自动继续。 图3 图4 四. 结束 笔者试用一个较简单的动画在一台PII400和一台PIII700工作站上分别独立渲染,耗时为676秒和400秒;而将两台工作站连起来进行网络渲染则只需320秒。可见网络渲染确实提高了效率,并且可以预期,随着参与渲染的工作站的增加和动画复杂程度的增加,效率也将更明显地得到提高。 要注意的是,网络渲染只支持生成TGA序列格式的文件,其它格式必须通过另外的软件转换TGA序列。 无论如何,3D Studio MAX为网络用户提供了一种额外的高效而灵活的渲染方式。
众所周知MySQL5.1的Replication是比较烂的。MySQL的每一个版本更新关于同步方面每次都是可以看到一大堆。但MySQL 5.1性能是比较突出的。所以经不住诱惑使用MySQL 5.1。所以也要经常遇到一些Bug。如: 复制代码 代码如下: mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.10.118 Master_User: repl_wu Master_Port: 3306 Connect_Retry: 30 Master_Log_File: mysql-bin.005121 Read_Master_Log_Pos: 64337286 Relay_Log_File: relay-bin.003995 Relay_Log_Pos: 18446697137031827760 Relay_Master_Log_File: mysql-bin.005121 Slave_IO_Running: Yes Slave_SQL_Running: No Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 1594 Last_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted (you can check this by running 'mysqlbinlog' on the binary log), the slave's relay log is corrupted (you can check this by running 'mysqlbinlog' on the relay log), a network problem, or a bug in the master's or slave's MySQL code. If you want to check the master's binary log or slave's relay log, you will be able to know their names by issuing 'SHOW SLAVE STATUS' on this slave. Skip_Counter: 0 Exec_Master_Log_Pos: 4 Relay_Log_Space: 64337901 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULL Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 1594 Last_SQL_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted (you can check this by running 'mysqlbinlog' on the binary log), the slave's relay log is corrupted (you can check this by running 'mysqlbinlog' on the relay log), a network problem, or a bug in the master's or slave's MySQL code. If you want to check the master's binary log or slave's relay log, you will be able to know their names by issuing 'SHOW SLAVE STATUS' on this slave. 1 row in set (0.00 sec) 从上面可以看到是中继日值或是Master上的日值出问题了。 首先如果是中继日值坏掉,那只需要找到同步的时间点,然后重新同步,这样就可以有新的中继日值了。如果Master上的日值坏了就麻烦了。 从经验来看,这是中继日值出问题了。处理方法: 需要找到同步的点。 日值为:Master_Log_File: mysql-bin.005121,Relay_Master_Log_File: mysql-bin.005121以Relay_Master_Log_File为准,Master_Log_File为参考。 日值执行时间点: 复制代码 代码如下:Exec_Master_Log_Pos: 4 那么现在就可以: 复制代码 代码如下: mysql>stop slave; mysql>change master to Master_Log_File='mysql-bin.005121', Master_Log_Pos=4; mysql>start slave; mysql>show slave status\G; 进行确认。 建议: 在使用MySQL-5.1.36以下的版本的同学,请尽快升级到MySQL-5.1.40 & MySQL-5.1.37sp1
/**客户端:*/Socket socket=null;InputStream in=null;OutputStream out=null;try {// socket = new Socket(host, port);// socket.setSoTimeout(10*1000);socket = new Socket();socket.setSoTimeout(10*1000);//读取数据超时设置3msocket.connect(new InetSocketAddress(host,port), 2000);//建立连接超时设置LOG.info("连接SPS服务成功!!!");in = socket.getInputStream();out = socket.getOutputStream();int len = message.getBytes().length;//要发送的信息长度,单位byteString sendMessage = StringHelper.rightAddSpace(String.valueOf(len), 6) + message;//转换成发送格式的字符串。前面6位是message的长度,不足6位右补空格out.write(sendMessage.getBytes());out.flush();} catch (Exception e) {returnStr = "回单SPS失败!";LOG.error(returnStr);e.printStackTrace();sendFlg = false;} finally{try {if(out!=null){out.close();}} catch (IOException e) {e.printStackTrace();}try {if(in!=null){in.close();}} catch (IOException e) {e.printStackTrace();}try {if(socket!=null){socket.close();}} catch (IOException e) {e.printStackTrace();}}/**服务端使用线程:*/public void run() {while (!isStop) {Socket socket = null;try {// 等待并接收请求,建立连接套接字。socket = serverSocket.accept();// 启动一个线程来进行服务器端和客户端的数据传输。// 主程序继续监听是否有请求到来。//处理InputStream in = null;OutputStream out = null;socket.setSoTimeout(3000);// 由Socket对象得到输入流,并构造相应的BufferedReader对象in = socket.getInputStream();out = socket.getOutputStream();//统计字节个数int count = 0;while (count == 0) {count = in.available();}byte[] inData = new byte[count];in.read(inData);byte[] inData = new byte[2000];//初始大小2000in.read(inData);String messageStr = StringHelper.byteToString(inData);} catch (Exception e) {e.printStackTrace();}}log.info(" 结束完成.............");}