
本人是新手,但是找了很久都找不到类似的通讯源码,后来终于在一个网站上看到有关于Socket的通讯事例,所以就抄过来希望能够帮助更多像我一样的初学者!嘻嘻
首先创建一个C# 控制台应用程序, 直接服务器端代码丢进去,然后再到Unity 里面建立一个工程,把客户端代码挂到相机上,运行服务端,再运行客户端。 高手勿喷!~!
完全源码已经奉上,大家开始研究吧!! 嘎嘎嘎!
服务端代码:Program.cs
普通浏览复制代码
-
using System;
-
using System. Collections. Generic;
-
using System.Linq ;
-
using System. Text;
-
using System. Net. Sockets;
-
-
namespace SoketDemo
-
 {
-
class Program
-
 {
-
-
const int portNo = 500;
-
-
static void Main (string[] args )
-
 {
-
-
System. Net.IPAddress localAdd = System. Net.IPAddress.Parse ("127.0.0.1");
-
-
-
 TcpListener listener = new TcpListener (localAdd, portNo );
-
-
 listener.Start ();
-
-
-
 Console.WriteLine ("Server is starting...\n");
-
-
-
while (true)
-
 {
-
 ChatClient user = new ChatClient (listener.AcceptTcpClient ());
-
-
-
 Console.WriteLine (user._clientIP + " is joined...\n");
-
 }
-
 }
-
 }
-
 }
服务端代码:ChatClient.cs
普通浏览复制代码
-
using System;
-
using System. Collections. Generic;
-
using System.Linq ;
-
using System. Text;
-
using System. Collections;
-
using System. Net. Sockets;
-
-
namespace SoketDemo
-
 {
-
class ChatClient
-
 {
-
public static Hashtable ALLClients = new Hashtable ();
-
-
private TcpClient _client ;
-
public string _clientIP ;
-
private string _clientNick ;
-
-
private byte[] data ;
-
-
private bool ReceiveNick = true;
-
-
public ChatClient (TcpClient client )
-
 {
-
this._client = client ;
-
-
this._clientIP = client.Client.RemoteEndPoint.ToString ();
-
-
-
 ALLClients.Add (this._clientIP, this);
-
-
 data = new byte[this._client.ReceiveBufferSize ];
-
-
-
 client.GetStream ().BeginRead (data, 0, System.Convert.ToInt32 (this._client.ReceiveBufferSize ), ReceiveMessage, null);
-
 }
-
-
-
public void ReceiveMessage (IAsyncResult ar )
-
 {
-
int bytesRead ;
-
-
try
-
 {
-
lock (this._client.GetStream ())
-
 {
-
 bytesRead = this._client.GetStream ().EndRead (ar );
-
 }
-
-
if (bytesRead < 1)
-
 {
-
 ALLClients.Remove (this._clientIP );
-
-
 Broadcast (this._clientNick + " has left the chat");
-
-
return;
-
 }
-
else
-
 {
-
string messageReceived = System. Text.Encoding.ASCII.GetString (data, 0, bytesRead );
-
-
if (ReceiveNick )
-
 {
-
this._clientNick = messageReceived ;
-
-
 Broadcast (this._clientNick + " has joined the chat.");
-
-
-
-
 ReceiveNick = false;
-
 }
-
else
-
 {
-
 Broadcast (this._clientNick + ">" + messageReceived );
-
-
 }
-
 }
-
-
lock (this._client.GetStream ())
-
 {
-
this._client.GetStream ().BeginRead (data, 0, System.Convert.ToInt32 (this._client.ReceiveBufferSize ), ReceiveMessage, null);
-
 }
-
 }
-
catch (Exception ex )
-
 {
-
 ALLClients.Remove (this._clientIP );
-
-
 Broadcast (this._clientNick + " has left the chat.");
-
 }
-
 }
-
-
-
public void sendMessage (string message )
-
 {
-
try
-
 {
-
System. Net. Sockets.NetworkStream ns ;
-
-
lock (this._client.GetStream ())
-
 {
-
 ns = this._client.GetStream ();
-
 }
-
-
-
byte[] bytesToSend = System. Text.Encoding.ASCII.GetBytes (message );
-
-
 ns.Write (bytesToSend, 0, bytesToSend.Length );
-
 ns.Flush ();
-
 }
-
catch (Exception ex )
-
 {
-
-
 }
-
 }
-
-
-
public void Broadcast (string message )
-
 {
-
 Console.WriteLine (message );
-
-
foreach (DictionaryEntry c in ALLClients )
-
 {
-
((ChatClient )(c.Value )).sendMessage (message + Environment.NewLine );
-
 }
-
 }
-
-
 }
-
 }
客户端代码 :ClientHandler
普通浏览复制代码
-
using UnityEngine ;
-
using System. Collections;
-
-
using System;
-
using System. Collections. Generic;
-
using System. ComponentModel;
-
using System. Text;
-
using System. Net. Sockets;
-
-
public class ClientHandler : MonoBehaviour
-
 {
-
const int portNo = 500;
-
private TcpClient _client ;
-
byte[] data ;
-
-
public string nickName = "";
-
public string message = "";
-
public string sendMsg = "";
-
-
void OnGUI ()
-
 {
-
 nickName = GUI.TextField (new Rect (10, 10, 100, 20), nickName );
-
 message = GUI.TextArea (new Rect (10, 40, 300, 200), message );
-
 sendMsg = GUI.TextField (new Rect (10, 250, 210, 20), sendMsg );
-
-
if (GUI.Button (new Rect (120, 10, 80, 20), "Connect"))
-
 {
-
-
-
this._client = new TcpClient ();
-
this._client.Connect ("127.0.0.1", portNo );
-
-
 data = new byte[this._client.ReceiveBufferSize ];
-
-
-
 SendMessage (nickName );
-
-
this._client.GetStream ().BeginRead (data, 0, System.Convert.ToInt32 (this._client.ReceiveBufferSize ), ReceiveMessage, null);
-
 } ;
-
-
if (GUI.Button (new Rect (230, 250, 80, 20), "Send"))
-
 {
-
 SendMessage (sendMsg );
-
 sendMsg = "";
-
 } ;
-
 }
-
-
public void SendMessage (string message )
-
 {
-
try
-
 {
-
 NetworkStream ns = this._client.GetStream ();
-
-
byte[] data = System. Text.Encoding.ASCII.GetBytes (message );
-
-
 ns.Write (data, 0, data.Length );
-
 ns.Flush ();
-
 }
-
catch (Exception ex )
-
 {
-
-
 }
-
 }
-
-
public void ReceiveMessage (IAsyncResult ar )
-
 {
-
try
-
 {
-
int bytesRead ;
-
-
 bytesRead = this._client.GetStream ().EndRead (ar );
-
-
if (bytesRead < 1)
-
 {
-
return;
-
 }
-
else
-
 {
-
-
 Debug.Log (System. Text.Encoding.ASCII.GetString (data, 0, bytesRead ));
-
-
 message += System. Text.Encoding.ASCII.GetString (data, 0, bytesRead );
-
 }
-
-
this._client.GetStream ().BeginRead (data, 0, System.Convert.ToInt32 (this._client.ReceiveBufferSize ), ReceiveMessage, null);
-
-
-
 }
-
catch (Exception ex )
-
 {
-
-
 }
-
 }
-
 }
|