#主要功能
在客戶端界面輸入字符串,發送字符串到服務端,再從服務端將字符串發送回來。
客戶端代碼
引入System.Net.Sockets
客戶端的邏輯
- 創建一個
Socket
對象,參數是地址簇,套接字類型和協議(socket.Connect
會造成線程阻塞) - 發送消息,將消息轉成
byte[]
數組,然後發送給服務端(socket.Send
會造成線程阻塞) - 接收消息,將
byte[]
數組轉成字符串,顯示在屏幕上(socket.Receive
會造成線程阻塞)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net.Sockets;
using UnityEngine.UI;
public class Echo : MonoBehaviour {
//定義套接字
Socket socket;
//UGUI
public InputField InputFeld;
public Text text;
//點擊連接按鈕
public void Connetion()
{
//Socket
socket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
//Connect
socket.Connect("127.0.0.1", 8888);
}
//點擊發送按鈕
public void Send()
{
//Send
string sendStr = InputFeld.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.UTF8.GetString(readBuff, 0, count);
text.text = recvStr;
//Close
socket.Close();
}
}
服務端代碼
服務端的邏輯
- 創建一個
Socket
- 創建一個
IPAddress
(IP地址)和IPEndPoint
(端口號) - 將
Socket
與IP
地址和端口號綁定 - 監聽客戶端的請求,(
listenfd.listen
會造成線程阻塞) - 接收客戶端的請求,生成一個新客戶端的對象,(
listenfd.Accept
會造成線程阻塞) - 接收客戶端的數據(同客戶端)
- 發送數據到客戶端(同客戶端)
using System;
using System.Net;
using System.Net.Sockets;
namespace EchoServer
{
class MainClass
{
public static void Main (string[] args)
{
Console.WriteLine ("Hello World!");
//Socket
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 = listenfd.Accept ();
Console.WriteLine ("[服務器]Accept");
//Receive
byte[] readBuff = new byte[1024];
int count = connfd.Receive (readBuff);
string readStr = System.Text.Encoding.UTF8.GetString (readBuff, 0, count);
Console.WriteLine ("[服務器接收]" + readStr);
//Send
string sendStr = System.DateTime.Now.ToString();
byte[] sendBytes = System.Text.Encoding.Default.GetBytes (sendStr);
connfd.Send (sendBytes);
}
}
}
}