1.http基于tcp;http通信一次会断开
2.http通过换行符来分割 http有http头,描述数据大小。
3.http是无状态协议。无状态可以扩展。
4.分区分房间
5.IP 和端口号
6.状态速度 和通信量,
7.流模型 请求响应 tcp攒字节
8.网络报文丢失,模拟
9.tcpClient;
10.tcolistenner;
11.1对多,1对10000,1对1000000;
12.线程有限 一些actor
13.udp不会产生新的 socket的。
14.启动时的异常,通信时 发生异常,关闭发生异常
15.缓存本地,重新发送,
16
socket.Shutdown(SocketShutdown.Both);
socket.Close();
17.
line.Split(char.Parse(" "));
18.多线程搞服务器
19.
var socket2 = socket.Accept();
var thread = new Thread(() => { ThreadRun(socket2); });
thread.Start();
20、用线程不用异步也可以多人聊天
21.消息放线程上,线程来广播。
22. Thread.Sleep(100);睡眠100毫秒
23.服务器处理多线程消息队列有点意思。
24.io复用技术 异步网络编程最好啊。
25.Io thread 监控。IO复用。
26.C# 中的task,轻量级线程,性能好。 Async Await; 必须用到tcpListenner
27.
var listener = new TcpListener(4040);
var client = listener.AcceptTcpClient();
private static async void ProcessSocket(TcpClient client) { var stream = client.GetStream(); while (true) { var buffer = new byte[1024]; var n = 0; try { n = await stream.ReadAsync(buffer, 0, 1024); }catch { } } }
28.
c.GetStream().write(buffer, 0, 1024);
29.
c.GetStream().write(buffer, 0, 1024);
listener.Start();
30.TcpListener TcpClient 客服端。封装了错误捕获。
31.socket 释放。资源。
32.原生资源释放,本身资源释放。
33.IOS tcpClient 设置成IPv6;
34.NoDelay 发送不缓存 提高及时响应能力啊。
35.
private static void AsyncRead(IAsyncResult result) { try { var n = client.GetStream().EndRead(result); }catch(Exception exp) { } }
36
var stream = client.GetStream(); var n = await stream.ReadAsync(buffer, 0, 1024);
37.udp考虑 应用层协议 tcp 考虑网络延时 超时,udp 报文可靠 性,有序性。
38.使用换行符。
29.md5
using (var md5 = md5.Create()) { data= md5.ComputeHash(buffer, 0, total); }
30.
声明变量作用域 完整的应该为using(类名 名 = 赋值){} 相当于: { 类名 名 = 赋值 名.Dispose(); } 即可用于满足 IDispose接口的类 ,可以通过这种形式,即使错误时候,也能使 .Dispose() 运行
31.十六进制 字符串
var sb = new StringBuilder();
for(var i = 0; i < data.Length; i++)
{
sb.Append(data[[i].ToString("x2"));
}
32.
for (var i = 0; i < total; i++)
{
sb1.Append(System.Convert.ToChar(Buffer[i);
}
33.长度 类型 内容
34Wire format 序列化的
35.protobuff协议。
36.安卓buff buffTool库
37.
using (var output = FileStyleUriParser.Create("john.data"{ }
var co = new Google.Protubuf.CodeOutpusStream(outpu);
john.WriteTo(co);
co.Flush();
; ))
38.状态机读取还是干啥 啊
39.Array.Copy(data,readYet,dataStream.buffer,dataStream.writePos,n);
40.协议编号 网络协议 请求响应模型和推送模型。
41.协议分为响应模型 和推送模型。 报文 多协议定义, C2S S2C;
42.Convert.ToInt32 制定的转换
43.服务器解析协议,并映射
44. Array.Copy(data,
45.
public IMessage ReadData(int typeId) { var type = idToProtocols[typeId]; var msg = Activator.CreateInstance(type) as IMessage; var ci = new Google.Protobuf.CodeInputStream(Buffer, 0, writePos); msg.MergeFrom(ci); return msg; }
46.请求响应模型 。协议定义帧号,根据帧号id 对应哪个请求。同一个请求 推送 是否购买成功 请求响应模型。 在协议定义帧id
//fraId >0;
//frame ==0;报文的帧ID;