unity Socket 通信
unity 端
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net.Sockets;
using System.Net;
using System;
using System.Text;
public class mClinet : MonoBehaviour
{
private Socket socket;
private byte[] buffer= new byte[1024];
void Start()
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect("127.0.0.1", 6666);// 链接服务器
StartReceive();
Send();
}
/// <summary>
/// 接收消息
/// </summary>
void StartReceive()
{
socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, null);
}
/// <summary>
/// 接收到的消息
/// </summary>
/// <param name="asyncResult"></param>
void ReceiveCallback(IAsyncResult asyncResult)
{
//消息长度
int len = socket.EndReceive(asyncResult);
//解析
// 如果有意端断开 len 就会是0
if (len <= 0) return;
//将buffer 转成字符串
string str = Encoding.UTF8.GetString(buffer, 0, len);
Debug.Log(str);
//再次接受
StartReceive();
}
void Send() {
socket.Send(Encoding.UTF8.GetBytes("服务器 你好! 我是客户端"));
}
}
vs控制台应用 服务器端
using System;
using System.Net.Sockets;
using System.Net;
using System.Text;
namespace mServer
{
class Program
{
/// <summary>
/// Socket 服务器
/// </summary>
private static Socket socket;
private static byte[] buffer = new byte[1024];
static void Main(string[] args)
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定
socket.Bind(new IPEndPoint(IPAddress.Any, 6666));
//同一个时间多少个客户端
socket.Listen(20);
StartAccept();
Console.WriteLine("服务器启动成功 等待客户端链接!");
while (true)
{
Console.Read();
}
}
/// <summary>
/// 应答
/// </summary>
private static void StartAccept()
{
socket.BeginAccept(AcceptCallback, null);
}
/// <summary>
/// 接受消息
/// </summary>
/// <param name="client"></param>
private static void StartReceive(Socket client)
{
client.BeginReceive(buffer,0,buffer.Length,SocketFlags.None, ReceiveCallback,client);
}
/// <summary>
/// 接收回调
/// </summary>
/// <param name="ar"></param>
private static void ReceiveCallback(IAsyncResult ar)
{
Socket client = (Socket)ar.AsyncState;
int len = client.EndReceive(ar);
if (len <= 0) return;
string str = Encoding.UTF8.GetString(buffer,0,len);
Console.WriteLine(str);
client.Send(Encoding.UTF8.GetBytes("你好客户端 我是服务器 "));
StartReceive(client);
}
/// <summary>
/// 应答回调
/// </summary>
/// <param name="ar"></param>
private static void AcceptCallback(IAsyncResult ar)
{
//客户端
Socket client = socket.EndAccept(ar);
client.Send(Encoding.UTF8.GetBytes("服务器启动成功 "));
StartReceive(client);
StartAccept();
}
}
}