序
这本书买了蛮久的,趁着寒假的时间拿出来学习一下,争取这个假期把这本书看完,把里面的实例代码都自己敲一遍,加深理解。
这是一个长期更新的系列:全书共十二章就算是每个章节写一篇文章也至少要写十二篇文章,希望自己可以坚持着书看完,把博客写完。
Socket连接步骤
示例图
type="text/javascript">document.write("graph TD;\n Client-->|连接服务器|Connect;\n Connect-->|发送消息|Send;\n Connect-->|三次握手|Accept;\n Send-->|接收服务器消息|Receive;\n Send-->|向服务器发送数据|ServerReceive;\n Receive-->|断开连接|Close;\n Close-->|四次挥手|ServerClose;\n Server-->|绑定Ip和端口|Bind;\n Bind-->|开启监听|Listen;\n Listen-->|接收客户端连接请求|Accept;\n Accept-->|接收客户端数据|ServerReceive;\n ServerReceive-->|给客户端发送数据|ServerSend;\n ServerSend-->|发送数据给客户端|Receive;\n ServerSend-->|断开连接|ServerClose;\n");
Echo
第一章主要讲解了网络的连接方式,在例子中初步实现了一个使用 Socket 的 TCP 通信的客户端和服务端案例。
客户端代码如下:
using System.Net.Sockets; | |
using UnityEngine; | |
using UnityEngine.UI; | |
public class Echo : MonoBehaviour | |
{ | |
public Button linkBtn; | |
public Button sendBtn; | |
public InputField inputField; | |
public Text infoText; | |
private Socket _socket; | |
private void Start() | |
{ | |
linkBtn.onClick.AddListener(Connection); | |
sendBtn.onClick.AddListener(SendMessage); | |
} | |
/// <summary> | |
/// 连接 | |
/// </summary> | |
void Connection() | |
{ | |
_socket=new Socket(SocketType.Stream,ProtocolType.Tcp); | |
_socket.Connect("127.0.0.1",8888); | |
} | |
/// <summary> | |
/// 发送消息 | |
/// </summary> | |
void SendMessage() | |
{ | |
var sendStr = inputField.text; | |
var sendBytes = System.Text.Encoding.Default.GetBytes(sendStr); | |
_socket.Send(sendBytes); | |
// 接收 | |
var readBuff = new byte[1024]; | |
//Receive 方法接收一个 byte [] 存储接收到的数据,并返回数据的大小,会阻塞线程 | |
var count = _socket.Receive(readBuff); | |
string recvStr = System.Text.Encoding.Default.GetString(readBuff, 0, count); | |
infoText.text = "提示信息:" + recvStr; | |
_socket.Close(); | |
} | |
} |
服务器端代码如下:
using System; | |
using System.Net; | |
using System.Net.Sockets; | |
using System.Text; | |
namespace netWork_Server | |
{ | |
internal class Program | |
{ | |
public static void Main(string[] args) | |
{ | |
Console.WriteLine("Hi"); | |
Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); | |
IPAddress ipAddress = IPAddress.Parse("127.0.0.1"); | |
IPEndPoint ipEndPoint=new IPEndPoint(ipAddress,8888); | |
socket.Bind(ipEndPoint); | |
//listen | |
socket.Listen(0); | |
Console.WriteLine("[服务器] 启动成功"); | |
while (true) | |
{ | |
//Accept | |
Socket connfd = socket.Accept(); | |
Console.WriteLine("[服务器] Accept"); | |
//Receive | |
byte[] readBuff=new byte[1024]; | |
int count = connfd.Receive(readBuff); | |
string readStr = System.Text.Encoding.Default.GetString(readBuff, 0, count); | |
Console.WriteLine("[服务器接收] "+readStr); | |
//send | |
var reStr = DateTime.Now.ToString(); | |
byte[] sendBytes = Encoding.Default.GetBytes(reStr); | |
connfd.Send(sendBytes); | |
} | |
} | |
} | |
} |
这样我们就可以在客户端和服务器之间构建 Socket 连接咯,至此第一章的内容就结束了,第一章并没有讲太多东西,只是简单的介绍了以下 Socket 通信的基本原理和一些 Socket 相关的方法 API,东西虽然不多但是此时此刻我们已经不是一个人了。我们的游戏联网了!