C#

学C#的第16天

森岩
2022-08-04 / 0 评论 / 2 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年08月04日,已超过1220天没有更新,若内容或图片失效,请留言反馈。

1、线程执行的带参数的方法

  1. 参数必须是object类型,如要使用其他类型的参数,在方法里面转
  2. Start里面传参:
            Thread th = new Thread(Test);
            th.IsBackground = true;
            th.Start("123");

2、Socket

1. 概念

  1. Socket的作用:电脑和电脑之间联系所使用的工具
  2. Socket的定义:是一种进程通信机制,通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。(其实就是两个程序通信用的)

2. 客户端和服务端通信的过程

  1. 客户端找到服务端负责监听的Socket
  2. 负责监听的Socket找到对应的应用程序
  3. 负责监听的Socket创建一个负责通信的Socke与客户端联系
  4. 客户端与服务端的应用程序建立连接
  5. 因此, 服务器最少有两个Socket :负责监听的;负责通信的。而客户端只需要一个Socket

3. 种类:

  1. 流式Socket(STREAM):是一种面向连接的Socket,针对于面向连接的TCP服务应用,安全但是效率低
  2. 数据报式Socket(DATAGTAM):是一种无连接的Socket,对应于无连接的UDP服务应用,不安全(丢失,顺序混乱,在接收端要分析重排及要求重发),但效率高

4. 代码:

1. 创建一个新的Socket对象

Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  1. AddressFamily表示IP地址:InterNetwork代表ipv4,InterNetworkv6代表ipv6
  2. SocketType表示Socket种类:tcp使用Stream,udp使用Dgram。
  3. ProtocolType表示使用的协议:tcp和udp

2. 创建IP地址对象

IPAddress ip = IPAddress.Any;//IPAddress.Parse(txtServer.Text);
  1. .Parse()将string类型转换为IPAddress赋值给ip
  2. .Any自动获取ip并赋值,通过any获得的,如果ip地址改变,ip也会跟着变

3. 其他

  1. IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));创建端口号对象
  2. socketWatch.Bind(point);让负责监听的Socket绑定IP地址和端口号,由于端口号信息里面已经包含了ip地址,所以不需要再传
  3. socketWatch.Listen(10);设置监听队列,同一时间只能有多少人接入,如果超出了就排队
  4. Socket socketSend = socketWatch.Accept();等待客户端的连接,并且创建一个负责通信的Socket。
    由于等待的时候一直占用主线程,因此窗口会卡住,需要另外开一个新的线程来等待连接。
    而且,连接一次之后就结束了,因此如果想要多个客户端连接,需要写一个循环。
  5. ShowMsg(socketSend.RemoteEndPoint.ToString() + ":" + "连接成功");获得服务端的ip地址和端口号
  6. int r = socketSend.Receive(buffer);接收到的字节,返回字节数
  7. socketSend.Connect(point)连接服务器
  8. socketSend.Send(buffer)发送字节数组

3、协议

 定义:电脑和电脑之间联系所使用的语言,常用的通常有TCP和UDP协议

1. TCP

1. 建立连接的过程:三次握手

  1. 第一次握手:客户端问服务器:你有空么?
  2. 第二次握手:服务器回复:有空
  3. 第三次握手:客户端:我知道你有空了
  4. 建立连接

2. 特性:

  1. 安全稳定
  2. 效率低

2. UDP

1. 建立连接:

  1. 不需要握手,客户端只管发,不管服务器有没有空接
  2. 有可能服务器没空处理,就会出现数据丢失

2. 特性:

  1. 快速,效率高
  2. 不稳定,容易发生数据丢失

3. 自创协议

                byte[] buffer = new byte[1024 * 1024 * 5];
                List<byte> list = new List<byte>();
                list.Add(1);
                list.AddRange((byte[])buffer);
                byte[] newbuffer = list.ToArray();

4、端口

  1. 概念:要访问服务器,需要知道它的ip地址。同一服务器只有一个ip地址,当访问里面的应用程序的时候,需要知道他们的端口号。
  2. 常用端口号:http--80; ftp--21; smtp--25;
  3. 端口号必须在1~65535之间,通常我们为了避免抢占端口号,使用1024以后的,最好是50000以后的
0

评论

博主关闭了所有页面的评论