You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
3.4 KiB
131 lines
3.4 KiB
using System; |
|
using System.Collections; |
|
using System.Collections.Generic; |
|
using System.Net; |
|
using System.Net.Sockets; |
|
using System.Net.WebSockets; |
|
using System.Web; |
|
using System.Text; |
|
using System.Threading; |
|
using UnityEngine; |
|
|
|
public class SocketServer : MonoBehaviour |
|
{ |
|
int _port = 8443; |
|
string _ip = "192.168.1.41"; |
|
Thread thread; |
|
|
|
|
|
void Start() |
|
{ |
|
StartServer(); |
|
} |
|
|
|
// Use this for initialization |
|
public void StartServer() |
|
{ |
|
bt_connnect_Click(); |
|
} |
|
|
|
|
|
private void bt_connnect_Click() |
|
{ |
|
try |
|
{ |
|
//点击开始监听时 在服务端创建一个负责监听IP和端口号的Socket |
|
Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); |
|
IPAddress ip = IPAddress.Parse(_ip); |
|
//创建对象端口 |
|
IPEndPoint point = new IPEndPoint(ip, _port); |
|
|
|
socketWatch.Bind(point);//绑定端口号 |
|
Debug.Log("监听成功!"); |
|
socketWatch.Listen(10);//设置监听,最大同时连接10台 |
|
|
|
//创建监听线程 |
|
thread = new Thread(Listen); |
|
thread.IsBackground = true; |
|
thread.Start(socketWatch); |
|
} |
|
catch { } |
|
|
|
} |
|
|
|
/// <summary> |
|
/// 等待客户端的连接 并且创建与之通信的Socket |
|
/// </summary> |
|
Socket socketSend; |
|
void Listen(object o) |
|
{ |
|
try |
|
{ |
|
Socket socketWatch = o as Socket; |
|
while (true) |
|
{ |
|
socketSend = socketWatch.Accept();//等待接收客户端连接 |
|
Debug.Log(socketSend.RemoteEndPoint.ToString() + ":" + "连接成功!"); |
|
//开启一个新线程,执行接收消息方法 |
|
Thread r_thread = new Thread(Received); |
|
r_thread.IsBackground = true; |
|
r_thread.Start(socketSend); |
|
} |
|
} |
|
catch { } |
|
} |
|
|
|
/// <summary> |
|
/// 服务器端不停的接收客户端发来的消息 |
|
/// </summary> |
|
/// <param name="o"></param> |
|
void Received(object o) |
|
{ |
|
try |
|
{ |
|
Socket socketSend = o as Socket; |
|
while (true) |
|
{ |
|
//客户端连接服务器成功后,服务器接收客户端发送的消息 |
|
byte[] buffer = new byte[1024 * 1024 * 3]; |
|
//实际接收到的有效字节数 |
|
int len = socketSend.Receive(buffer); |
|
if (len == 0) |
|
{ |
|
break; |
|
} |
|
string str = Encoding.ASCII.GetString(buffer, 0, len); |
|
Debug.Log("数据接收:" + socketSend.RemoteEndPoint + ":" + str); |
|
Send("我收到了"); |
|
} |
|
} |
|
catch { } |
|
} |
|
|
|
/// <summary> |
|
/// 服务器向客户端发送消息 |
|
/// </summary> |
|
/// <param name="str"></param> |
|
void Send(string str) |
|
{ |
|
byte[] buffer = Encoding.UTF8.GetBytes(str); |
|
socketSend.Send(buffer); |
|
} |
|
|
|
public void SocketQuit() |
|
{ |
|
//关闭线程 |
|
if (thread != null) |
|
{ |
|
thread.Interrupt(); |
|
thread.Abort(); |
|
} |
|
//最后关闭服务器 |
|
if (socketSend != null) |
|
socketSend.Close(); |
|
print("diconnect"); |
|
} |
|
void OnApplicationQuit() |
|
{ |
|
//退出时关闭连接 |
|
SocketQuit(); |
|
} |
|
}
|
|
|