本人是新手,但是找了很久都找不到类似的通讯源码,后来终于在一个网站上看到有关于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.
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
)
-
{
-
-
}
-
}
-
}
|
转载自 http://www.u3dchina.com/t-4741-1-1.html
普通浏览
复制代码
-
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