[Unity3D ARPG网络游戏编程实践]1——初识unity网络编程

[Unity3D ARPG网络游戏编程实践]

想杀人了,百度了半天也不知道本地服务怎么写,结果资源里的服务器竟然可以用了~~~~(>_<)~~~~
使用了两种方法
1 这个方法特别郁闷,自己写服务器,自己写客户端可以通讯。可是这个服务器用在 [Unity3D ARPG网络游戏编程实践] 中就不能链接成功,还好资源里带有启动本地服务的程序,不会原因,不懂服务器链接的原理
宣雨松版服务器客户端通讯代码

服务器端
using UnityEngine;
using System.Collections;

public class localServer : MonoBehaviour {

    int port = 10110;
    void OnGUI()
    {
        switch (Network.peerType)
        {
            case NetworkPeerType.Client://成功连接至客户端
                break;
            case NetworkPeerType.Connecting://正在尝试连接
                break;
            case NetworkPeerType.Disconnected://未启动状态,在此开始网络连接
                StartServer();
                break;
            case NetworkPeerType.Server://成功连接服务器
                OnServer();
                break;

        }
    }

    void StartServer()
    {
        if (GUILayout.Button("创建本地服务器"))
        {
            //创建本地服务器允许10台主机连接,第三个参数:是否支持nat方式的连接
            NetworkConnectionError error = Network.InitializeServer(10, port, false);
            //如果连接失败打印错误信息
            Debug.Log("连接状态:" + error);
        }
    }

    void OnServer()
    {
        GUILayout.Label("服务器创建完毕,等待用户连接");
        //得到用户的连接数量
        int length = Network.connections.Length;
        for (int i = 0; i < length; i++)
        {
            GUILayout.Label("连接服务器客户端的ID:" + i);
            GUILayout.Label("连接服务器客户端IP:" + Network.connections[i].ipAddress);
            GUILayout.Label("连接服务器客户端端口号:" + Network.connections[i].port);
        }

        if (GUILayout.Button("断开本地连接"))
        {
            Network.Disconnect();
        }
    }
}

客户端代码

using UnityEngine;
using System.Collections;

public class clientServer : MonoBehaviour {

    //要连接的服务器地址
    //string IP = "192.168.110.231";
    string IP = "127.0.0.1";
    //要连接的端口
    int Port = 10110;

    void OnGUI()
    {
        //端类型的状态
        switch (Network.peerType)
        {
            //禁止客户端连接运行, 服务器未初始化
            case NetworkPeerType.Disconnected:
                StartConnect();
                break;
            //运行于服务器端
            case NetworkPeerType.Server:
                break;
            //运行于客户端
            case NetworkPeerType.Client:
                break;
            //正在尝试连接到服务器
            case NetworkPeerType.Connecting:
                break;
        }
    }

    void StartConnect()
    {
        if (GUILayout.Button("连接服务器"))
        {
            NetworkConnectionError error = Network.Connect(IP, Port);
            Debug.Log("连接状态" + error);
        }
    }
}

  

2 [Unity3D ARPG网络游戏编程实践] 视频资源
只有客户端代码(注意,networkSript1类没有继承自MonoBehaviour,不能直接添加给照相机,可以在照相机组件视窗中add newscript添加脚本)

using UnityEngine;
using System.Collections;
using System.Net.Sockets;

public class networkSript1{
    private static networkScript instance;
    private static Socket socket;

    private static string IP = "127.0.0.1";
    private static int port = 10100;

    public static networkScript getInstance()
    {
        if (instance == null)
        {
            instance = new networkScript();
            init();
        }
        return instance;
    }

    public static void init()
    {
        try
        {
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect(IP, port);
            Debug.Log("服务器连接成功");
        }
        catch
        {

            Debug.Log("服务器连接失败");
        }
    }
}

  

具体操作:
1 删除摄像机,使用NGUI添加小部件
2 创建资源并给场景添加button
3 给摄像机添加网络连接脚本:networkSript1类没有继承自MonoBehaviour,不能直接添加给照相机,可以在照相机组件视窗中add newscript添加脚本
3.1 socket对象(inter网连接类型,流方式传输,tcp协议)
3.2 函数Connect(ip,port)
4 在button的回调函数中添加连接代码

总结
Socket.BeginReceive 方法 (Byte[], Int32, Int32, SocketFlags, SocketError, AsyncCallback, Object)
开始从连接的 Socket 中异步接收数据。

public IAsyncResult BeginReceive(
byte[] buffer,
int offset,
int size,
SocketFlags socketFlags,
out SocketError errorCode,
AsyncCallback callback,
Object state
)
参数
buffer
类型:System.Byte[]
Byte 类型的数组,它是存储接收到的数据的位置。
offset
类型:System.Int32
buffer 中存储所接收数据的位置。
size
类型:System.Int32
要接收的字节数。
socketFlags
类型:System.Net.Sockets.SocketFlags
SocketFlags 值的按位组合。
errorCode
类型:System.Net.Sockets.SocketError
一个 SocketError 对象,它存储套接字错误。
callback
类型:System.AsyncCallback
一个 AsyncCallback 委托,它引用操作完成时要调用的方法。
state
类型:System.Object
一个用户定义对象,其中包含接收操作的相关信息。 当操作完成时,此对象会被传递给 EndReceive 委托。

返回值
类型:System.IAsyncResult
引用异步读的 IAsyncResult。

时间: 2024-10-11 15:49:47

[Unity3D ARPG网络游戏编程实践]1——初识unity网络编程的相关文章

Java网络编程和NIO:Java网络编程基础

转自: https://www.cnblogs.com/midiyu/p/7875574.html 关于网络 网络协议 如同人与人之间相互交流是需要遵循一定的规矩一样,计算机之间能够进行相互通信是因为它们都共同遵守一定的规则,即网络协议. 网络体系结构 计算机网络是个复杂的系统,按照人们解决复杂问题的方法,把计算机网络实现的功能分到不同的层次上,层与层之间用接口连接.通信的双方具有相同的层次,层次实现的功能由协议数据单元(PDU)来描述.不同系统中的同一层构成对等层,对等层之间通过对等层协议进行

嵌入式 Linux网络编程(一)——Socket网络编程基础

嵌入式 Linux网络编程一--Socket网络编程基础 一.Socket简介 1.网络中进程间通信 本机进程使用进程号区别不同的进程进程间通信方式有管道.信号.消息队列.共享内存.信号量等.网络中进程间的通信首先需要识别进程所在主机在网络中的唯一标识即网络层的IP地址主机上的进程可以通过传输层的协议与端口号识别. 2.Socket原理 Socket是应用层与TCP/IP协议族通信的中间软件抽象层是一种编程接口.Socket屏蔽了不同网络协议的差异支持面向连接(Transmission Cont

java 网络编程-(1)引入网络编程

网络编程现在是非常普遍的编程技术了,网络编程无非就是两台或者多台设备(通常是计算机)之间的相互通信,相互之间的数据传输.网络编程的实质其实就是程序和程序之间的相互通信,相互传递数据.在网络通信中,第一次主动发起通信请求的成为客户端(Client),第一次通信中等待连接的称为服务器端(Server),在网络通信的过程中,Client端和Server端没有本质的区别. 那么,怎样才能通过客户端找到服务器从而进行网络通信呢?答案就是通过ip来找到服务器,我们都知道,服务器上运行着多个程序,也就是多个进

Linux下的socket编程实践(一) 网络基本知识以及 TCP/IP简述

ISO/OSI七层参考模型 1.物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由1.0转化为电流强弱来进行传输,到达目的地后再转化为1.0,也就是我们常说的数模转换与模数转换).这一层的数据叫做比特.(标志:RJ-45) 2.数据链路层:定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问.这一层通常还提供错误检测和纠正,以确保数据的可靠传输,交换机属于本层. 3.网络层:在位于不同地理位置的网络中的两个主机系

Go基础编程实践(八)—— 系统编程

捕捉信号 // 运行此程序,控制台将打印"Waiting for signal" // 按Ctrl + C 发送信号以关闭程序,将发生中断 // 随后控制台依次打印"Signal .."."Exiting..." package main import ( "os" "os/signal" "syscall" "fmt" ) func main() { // 缓冲通道

【Linux 网络编程】常用TCP/IP网络编程函数

(1)函数socket 1 /**************************************************************** 2 ** 功能:创建一个套接字用于通信 3 ** 参数:domain 指定通信协议族 4 ** type 指定socket类型,流式套接字 SOCK_STREAM 5 ** 数据报套接字 SOCKDGRAM 6 ** 原始套接字 SOCKRAW 7 ** protocol 协议类型 (习惯上填写0) 8 ** 返回值:成功返回非负整数,它

第三模块:面向对象&amp;网络编程基础 第2章 网络编程

01-计算机基础 02-什么是网络 03-五层协议详解 04-传输层详解 05-什么是Socket 06-基于socket实现简单套接字通信 07-在简单套接字基础上加上通信循环 08-客户端与服务端代码bug修复 09-实现服务端对多个客户端提供服务 10-模式ssh远程执行命令-项目分析 11-模拟ssh远程执行命令-代码实现 12-粘包现象 13-粘包底层原理分析 14-解决粘包问题-伪代码实现 15-解决粘包问题-简单版本 16-解决粘包问题-终极版本 17-文件传输功能实现 18-文件

网络编程的基本概念,TCP/IP协议简介

8.1.1 网络基础知识 计算机网络形式多样,内容繁杂.网络上的计算机要互相通信,必须遵循一定的协议.目前使用最广泛的网络协议是Internet上所使用的TCP/IP协议. 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机.而TCP层则提供面向应

Java学习之网络编程实例

转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码