Echo程序
Echo程序是网络编程中最根底的案例。建设网络连接后,客户端向服务端发送一行文本,服务端收到后将文本发送回客户端。
此处Echo程序分为客户端和服务端两个局部,客户端局部应用Unity实现。为了对立,服务端这里用C#实现。
客户端
在Unity制作简略的UGUI界面。
须要的UI包含:
①ConnectButtion 连贯按钮(用于和服务端建设连贯)
②InputField 输入框
③SendButton 发送按钮
④Text 文本框 (用于显示服务端返回的文本)
上面先给出Echo.cs脚本的代码
using System.Collections;using System.Collections.Generic;using UnityEngine;using System.Net.Sockets;using UnityEngine.UI;
public class Echo : MonoBehaviour{
Socket socket;public InputField InputField;public Text text;public void Connection(){ //Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect("127.0.0.1",8888);}public void Send(){ //Send string sendStr = InputField.text; byte[] sendBytes = System.Text.Encoding.Default.GetBytes(sendStr); socket.Send(sendBytes); //Recv byte[] readBuff = new byte[1024]; int count = socket.Receive(readBuff); string recvStr = System.Text.Encoding.Default.GetString(readBuff, 0 , count); text.text = recvStr; //Close socket.Close();}}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Connection()
客户端通过socket.connect(近程IP地址,近程端口)来连贯服务端。
Send()
客户端通过socket.Send()发送数据。本办法承受一个byte[]类型的参数指明要发送的内容。所以须要用System.Text.Encoding.Default.GetBytes()把输入到输入框的字符串转换为Byte[]数组,再发送游戏数据。
Receive()
客户端通过socket.Receive()接管服务端数据。之后应用System.Text.Encoding.Default.GetString(readBuff,0,count)将byte[]数组转换为字符串再显示到屏幕。
Close()
客户端通过socket.Close()敞开连贯。
随后只须要将Echo.cs脚本拖到场景中任意物体,并给Inputfield和Test两个属性赋值。并给两个按钮增加点击事件,调用Echo组件中相应的办法。
例如:在www.sangpi.com中退出了ConnectButton的点击事件为调用Echo组件的Connection办法。
服务端
在MonoDevelop或是Visual Studio等工具中创立一个Console控制台程序。
服务端代码如下(应用C#)
using System;using System.Net;using System.Net.Sockets;namespace EchoServer{
class MainClass { public static void Main(string[] args) { Console.WriteLine("Hello world!"); Socket listenfd = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //Bind IPAddress ipAdr = IPAddress.Parse("127.0.0.1"); IPEndPoint ipEp = new IPEndPoint(ipAdr, 8888); listenfd.Bind(ipEp); //Listen listenfd.Listen(0); Console.WriteLine("[服务器]启动胜利”); while(true) { //Accept Socket connfd = listendfd.Accept(); Console.WriteLine("[服务器]Accept"); //Receive byte[] readBuff = new byte[1024]; int count = connfd.Receive (readBuff); string readStr =
System.Text.Encoding.Default.GetString(readaBuff, 0 , count);
Console.WriteLine("[服务器接管]"+readStr); //Send byte[] sendBytes = System.Text.Encoding.Default.GetBytes(readStr); connfd.Send(sendBytes); } } } }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
绑定Bind
listenfd.Bind(ipEp)将给listenfd套接字绑定IP和端口。这里应用的127.0.0.1是回送地址,指本地机,个别用于测试。
监听Listen
服务端通过listenfd.Listen(backlog)开启监听,期待客户端连贯。backlog示意指定队列中最多可包容期待承受的连接数。0示意不限度。
应答Accept
开启监听后,服务器通过listenfd.Accept()承受客户端连贯。
IPAddress和IPEndPoint
应用前者指定IP地址,应用后者指定IP和端口。
测试
运行服务端和客户端程序。点击客户端的连贯按钮,在文本框输出文本再点击发送按钮。服务端会返回你输出的内容到Text内。
后续会尝试看能不能开发!