Unity游戏开发网络基础(2)
来源:互联网 发布:python 一段时间日期 编辑:程序博客网 时间:2024/05/22 12:03
套接字Socket
在网络游戏制作中,套接字是支持TCP/IP协议网络通信的基本操作单位,可以将套接字看做不同主机间的进程双向通信的端点,它构成单个主机内及整个网络间的编程界面。
参考:http://blog.csdn.net/cxh342968816/article/details/6336914
1.Socket连接的流程
步骤
①开启一个连接之前,首先要完成Socket和Bind两个步骤。新建一个Socket,Bind指定套接字IP和端口。
②服务端通过Listen开启监听,等待客户端接入。
③客户端利用Connect连接服务器,服务端通过Accept接受客户端连接。
④客户端和服务端通过write和read发送和接受数据。
⑤通过close关闭。
2.Socket类一些方法和属性
System.Net.Sockets命名空间
这里可查询:https://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket(VS.80).aspx
3.一个简单的小梨子(同步Socket程序)
服务端
using System;using System.Net;using System.Net.Sockets;/*服务端程序*/class MainClass{public static void Main(string []args){/*第一步,创建Socket*/Socket listenfd = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.TCP);/*第二步,绑定IP和端口*/IPAddress ipaddress = IPAddress.Parse("127.0.0.1");/*本地地址*/int port = 6666;/*程序端口号*/IPEndPoint ipEndPoint new IPEndPoint(ipaddress,port);listenfd.Bind(ipEndPoint);/*第三步,监听*/listenfd.Listen(0);/*不限制最大连接数目*/Console.WriteLine("服务器启动成功");while(true){/*第四步,客户端连接*/Socket connectfd = listenfd.Accept();/*连接服务器的客户端Socket*/ Console.WriteLine("客户端已连接");/*第五步,接受数据*//*容器(用于存放数据)*/byte[] readBuff = new byte[1024];/*接受客户端数据,保存到容器中并返回数据长度*/int count = connectfd.Receive(readBuff);/*将接受到的数据转换成string类型*/string str = System.Text.Encoding.UTF8.GetString(readBuff,0,count);Console.WriteLine("服务器接收数据" + str);/*第六步,发送数据*/byte[] writeBuff = System.Text.Encoding.Default.GetByte(str + "我已经接收到了");connectfd.Send(writeBuff);/*将接收到的数据加上信息发送给客户端*/}}}
客户端程序
using UnityEngine;using System.Collections;using System.Net;using Ststem.Net.Socket;public class Client : MonoBehaviour{/*第一步,创建Socket*/Socket socket;/*第二步,确定目标服务器的IP地址和端口(可以用任何方法获取)*/private string ipaddress = "127.0.0.1";/*IP地址*/private int port = 7777;/*端口*/void Start(){socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.TCP);/*第三步,连接*/socket.Connect(ipaddress,port);Debug.Log("客户端地址:" + socket.LocalEndPoint.ToString());/*第四步,发送数据*/string str = "Hello,Unity";byte[] bytes = Ststem.Text.Encoding.Default.GetByte(str);socket.Send(bytes);/*第五步,接收数据*/private const int BUFFER_SIZE = 1024;byte[] readBuff = new byte[BUFFER_SIZE];/*文件接受缓冲区*/int count = socket.Receive(readBuff);str = System.Text.Encoding.UTF8.GetString(readBuff,0,count);Debug.Log(str);/*服务器回应的数据*//*第六步,关闭连接*/socket.Close();}}
先开启服务端,再开启客户端,这样就能实现功能了。
相关要点:
①Socket构造函数的参数分别表示
△(AddressFamily)地址族:IPv4或IPv6,IPv4即InterNetwork
△(SocketType)套接字类型:http://www.cnblogs.com/istrong/archive/2012/06/10/2544357.html 有详细说明,游戏常用Stream。
△(ProtocolType)协议:https://msdn.microsoft.com/zh-cn/library/system.net.sockets.protocoltype.aspx
②Bind
给创建的listenfd套接字绑定IP和端口。
③Listen
开启监听,等待客户端连接。参数指定队列中最多可以容纳等待接受的连接数,0表示不限制。
④Accept(阻塞方法,就是客户端没有连接的时候在这里等待)
接受客户端连接,返回一个新的客户端Socket。
⑤Receive(阻塞方法)
接受数据
△参数:byte数组,存储接收到的数据。
△返回值:所接收数据的长度。
⑥Send发送数据。
- Unity游戏开发网络基础(2)
- Unity游戏开发网络基础(1)
- Unity游戏开发网络基础(3)
- [Unity 网络]网络基础
- 游戏开发基础(2)
- Unity网络多玩家游戏开发教程(上册)
- 《Unity网络多玩家游戏开发教程(上册)》
- Unity网络多玩家游戏开发教程第1章Unity自带网络功能
- Unity网络多玩家游戏开发教程第1章Unity自带网络功能
- android+unity游戏开发基础之场景的切换
- android+unity游戏开发基础之场景的切换
- unity基础开发-- 动态加载游戏对象或文件
- unity动作的游戏开发笔记2
- 使用Unity开发2D游戏笔记
- unity 游戏开发 链接
- Unity游戏开发倒计时
- Unity与游戏开发
- UNITY游戏开发源码
- 自定义UISegmentControl控件
- learning之建造者模式
- C语言包含头文件时用引号和尖括号的区别
- 用python解压分析jar包
- 【二叉树】树的直径【543. Diameter of Binary Tree】
- Unity游戏开发网络基础(2)
- jetty9优化,添加jvm参数配置
- Android Studio的下载和配置
- 数据结构和算法思维导图
- 命令行编译C/C++程序
- poj1860(求是否存在大于0的路径,spfa算法) Currency Exchange
- hive中建好表后,使用load命令从本地文件系统导入数据,去表中查全是null
- [ML笔记]模型表示与代价函数
- JavaWeb开发小工具