C# 网络编程
互联网通过 IP 定位电脑。
IP地址:
- 每台联网的电脑都有一个唯一的IP。(如果有多个网卡,一个网卡,一个IP)
- IPV4:分为4段,每段8bit,范围是0-255
- 用户本地网卡IP:127.0.0.1
- IPV6:128bits
在电脑中通过 Port 来定位程序。
常用端口:21FTP, 25SMTP, 110POP3, 80HTTP, 443HTTPS
程序之间通过 协议 定义通信数据的格式。
网卡接受到数据以后,根据端口号,把数据发送给不同的程序。
Socket
定义:
是一种通信机制,用于描述IP地址和port,是一个通信链的句柄。用于两个程序的通信。
Socket类似打电话。电话通信的双方相当于相互通信的2个程序,电话号码是IP。用户通话前,首先要占有一部电话(socket),同时要知道对方的号码(对方有一个固定的socket),然后拨号(发出连接请求)。对方假如在场并空闲,拿起电话筒,双方就可以通话(连接成功)。双方通话的过程,相当于一方向socket发送数据,一方从socket接收数据。通话结束后,一方挂起电话,相当于关闭socket,撤销连接,
类型:
流式Socket(Stream):是一种面向连接的Socket,tcp协议用stream socket,安全,效率低。
browser和server之间使用的tcp协议(流式socket)
数据报Socket(Datagram):无连接的Socket,udp使用报式Socket,不安全(丢失,顺序混乱,在接收端要分析重排序,要求重发等),效率高。
chatting项目示例
ChattingServer示例:
创建一个winform程序
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//服务器段 监听socket
Socket sListen = null;
private void btnListen_Click(object sender, EventArgs e)
{
//1.创建监听套接字 使用 ip4协议,流式传输,TCP连接
sListen = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//2.绑定端口
//2.1获取网络节点(IPEndPoint)对象
IPAddress ip = IPAddress.Parse(txtIP.Text);
IPEndPoint endPoint = new IPEndPoint(ip, int.Parse(txtPort.Text));
//2.2绑定端口(其实内部 就向系统的 端口表中 注册 了一个端口,并指定了当前程序句柄)
sListen.Bind(endPoint);
//2.3设置监听队列
//The maximum length of the p