string s="hello";
string s2=@"C:\chicai"; //@表示不转义
s.Length //获取字符串长度
StringBuilder builder=new StringBuilder()
builder.Append("haha");//在后面追加
//这个不产生太多的垃圾,需要经常修改的字符串可以用这个
object、string、dynamil
System.Object System.String System.Dynamil
int 其实是System.Int32
bool System.Boolean
struct 名字{值和方法}
enum Days{Monday,.....} 枚举
JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("json.txt"));
JsonData notes = jsonData["employees"];//获取到数组
for (int i = 0; i < notes.Count; i++) {
Console.WriteLine(notes[i]["firstName"]);//获取到对象
}Skill[] skillArray = JsonMapper.ToObject<Skill[]>(File.ReadAllText("文件名"));
Skill类里面的属性要与json里面对应,模型对应
注意,c#没有内置的json解析器,需要下载,这里用的是LitJSON,下载dll文件,引入即可
也可以使用UnityEngine内置的JsonUtility类来解析json数据。
[Serializable]
public class Data
{
public int status;
public string msg;
public string WaterMark;
}
Data data = null;
try
{
data = JsonUtility.FromJson<Data>(json);
}
catch (Exception e)
{
yield break;
}
XmlDocument xml = new XmlDocument();
xml.Load("xml.txt");//需要加载的XML文件
XmlNode firstNode = xml.FirstChild;//获取第一个节点
Console.WriteLine(firstNode.Name);//获取节点的名称
Console.WriteLine(firstNode.NextSibling.Name);//获取下一个节点的名称
Console.WriteLine(firstNode.Attributes["time"].Value);//获取第一个节点属性time的值
XmlNodeList nodes = firstNode.ChildNodes;//获取第一个节点的所有子节点
foreach (XmlNode node in nodes) {
Console.WriteLine(node.Name);
Console.WriteLine(node.InnerText);//获取节点的类容
}XmlDocument 在System.Xml 命名空间里
注意,Xml文件如果有声明项xml,它将为第一个节点
XmlElement ele = Node["字标签名"];
string[] strs = File.ReadAllLines("文件路径");//读取所有行,返回字符串数组
byte[] datas = File.ReadAllByte("文件路径");//一般读取文件等字节型数据
string str = File.ReadAllText("文件路径");//返回所有的数据为一个字符串
服务端
1.创建socker
Socket tcpServer = new Socket( AddressFamily.InterNetwork,//内网 SocketType.Stream,//传输类型 ProtocolType.Tcp);//协议
2.绑定ip跟端口号
IPAddress ip = new IPAddress(new byte[]{192,168,252,8});
EndPoint point = new IPEndPoint(ip,7788); //封装ip和端口,终端
tcpServer.Bind(point);//绑定3.监听和发送消息
tcpServer.Listen(100);//最大绑定数 Socket client = tcpServer.Accept();//暂停当前线程,直到有客户端连接 //使用返回的Socket进行通信 string message = "hello 欢迎你"; byte[] data = Encoding.UTF8.GetBytes(message); client.Send(data);
客户端
1.创建Socket
Socket cilent = new Socket( AddressFamily.InterNetwork,//内网 SocketType.Stream,//传输类型 ProtocolType.Tcp);//协议
2.发起建立连接的请求
IPAddress ip = IPAddress.Parse("192.168.252.8");
EndPoint point = new IPEndPoint(ip,7788);
client.Connect(point);
byte[] data = new byte[1024];
int length = client.Receive(data);
string message = Encoding.UTF8.GetString(data,0,length);实例运用中,服务器建立一个客户端类,用来管理客户端的收发信息,在主程序中用一个客户端类集合管理全部的客服端。
需要不停接受,不停监听的都要开启一个线程
TcpListener TcpClient 使用NetworkStream类表示网络。用GetStream返回网络流,再调用Read Write方法读写数据
Thread t = new Thread(方法名);
t.start(参数可有可无);//定义方法的参数时类型必须是object的
Thread t = new Thread(() => {}); //Lambda表达式通过定义类的属性,方法,在方法中调用属性(当做参数)
将此类的对象方法传给线程,对象的属性就可以作为传递的参数了
前台线程在Main线程结束时不杀掉,后台就杀掉,默认线程是前台线程
t.isBackground; //是否是后台线程 t.Abort();//终止此线程 t.Join();//等待该线程完成,再执行下面代码
委托名.BeginInvoke(参数..., ar =>
{
int(返回类型) res = 委托名.EndInvoke(ar);
});
用委托开启一个线程
IAsyncResult ar = 委托名.BeginInvoke(参数...,回调函数,回调函数参数)
回调函数在线程结束的时候调用
ar.isCompleted;//可以判断线程是否结束 ar.AsyncWaitHanle.WaitOne(等待最大时间);//暂停到线程完成时
如果线程在最大时间内结束返回true,否则返回false
返回结果 = 委托名.EndInvoke(ar); ar.AsyncState;//获取回调函数传的参数,用来传委托名过来等
回调函数自动传递IAsyncResult ar参数