C# Socket Demo
通过函数回调机制实现的异步,回调函数中的逻辑保证在IO-Bound操作后执行,而线程不会在IO—Bound操作时阻塞等待
ps:IO—Bound表示需要一段时间等待的io逻辑
Client
using System.Text;
using System;
using System.Net.Sockets;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SocketClient : MonoBehaviour {
private Socket server;
private byte[] buf = new byte[1024];
void Start() {
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server.Connect("192.168.1.4", 8054);
// 异步接收数据
StartReceive();
// 向server发送消息
Send();
}
void StartReceive() {
server.BeginReceive(buf, 0, buf.Length, SocketFlags.None, ReceiveCallback, null);
}
void ReceiveCallback(IAsyncResult res) {
int len = server.EndReceive(res);
if(len == 0) return;
string s = Encoding.UTF8.GetString(buf, 0, len);
Debug.Log(s);
StartReceive();
}
void Send() {
server.Send(Encoding.UTF8.GetBytes("一条来自client的消息!"));
}
// Update is called once per frame
void Update() {
}
}
Server
using System.Text;
using System.Net;
using System.Net.Sockets;
class Program {
private static Socket server;
private static byte[] buf = new byte[1024];
static void Main(string[] args) {
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server.Bind(new IPEndPoint(IPAddress.Parse("192.168.1.4"), 8054));
server.Listen(0);
StartAccept();
// 阻塞
Console.Read();
}
static void StartReceive(Socket client) {
client.BeginReceive(buf, 0, buf.Length, SocketFlags.None, ReceiveCallback, client);
}
static void ReceiveCallback(IAsyncResult res) {
Socket client = res.AsyncState as Socket;
Send(client);
int len = client.EndReceive(res);
if(len == 0) return;
string s = Encoding.UTF8.GetString(buf, 0, len);
System.Console.WriteLine(s);
StartReceive(client);
}
static void StartAccept() {
server.BeginAccept(AcceptCallback, null);
}
static void AcceptCallback(IAsyncResult res) {
Socket client = server.EndAccept(res);
StartReceive(client);
StartAccept();
}
static void Send(Socket client) {
client.Send(Encoding.UTF8.GetBytes("一条来自Server的消息!"));
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)