C#网络编程

Posted 芜明-追星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#网络编程相关的知识,希望对你有一定的参考价值。

TCP: 面向连接的传输协议
全双工: A---B 可以互相传递数据
点对点: 传输的数据不可能有多个接收方
可靠的数据传输: 发送的数据是ABC,接受到的一定是ABC

TCP 属于:传输层的协议

套接字:
应用程序通过套接字类获取到 输入和输出的数据.
TcpClient:则用于接收和发送流数据
TcpListener:用于接受连接请求

总是服务端使用TcpListener类


网络连天程序的三种模式
1. 点对点,每一台计算机都是服务器
2. A在服务器中知道了B, 就可以直接A -- B 的连接对话
3. A -- 服务器 -- B


漫长的编程操作
IpAddress类
IPAddress ip = IPAddress.Parse("192.168.0.1");

IPEndPoint类(表示ip和端口号)
IPEndPoint iep = new IPEndPoint(ip, 5666);

Dns类
1. 解析制定的域名
GetHostName() 获取本机名
GetHostEntry() 根据主机名,获取到ip对象

Socket类: 封装了 连接,监听,接受的方法.

TcpClient类(客户端)
tcpClient.Connect(connIP, connPort); //连接指定网络端
netWorkStream = tcpClient.GetStream(); //获取流

TcpListener类(服务器)
tcpListener.Start(); //开始监听
client = tcpListener.AcceptTcpClient(); //中断进程

NetWorkStream网络流
//创建一个异步委托
AsyncCallback callback = new AsyncCallback(ReadMessage);
//当buffer读取完毕之后,就调用callback委托中的方法进行处理
netWorkStream.BeginRead(buffer, 0, buffer.Length, callback, null);


UPD编程简介:
是一种"面向数据报"的"无连接协议":,提供的是"不一定可靠"的传输服务

UDP 与 TCP的区别
1. UDP可靠性不如TCP
2. UDP不能保证有序传输

UDP优势
1. UDP速度比TCP快
2. UDP可以一对多传输
3. UDP有消息边界(有格式的)

UdpClient类
几种实例化方式:
1. public UdpClient();
2. public UdpClient(int port); 只需要发送数据报,(匿名发送) .对方无法判断发送方的端口
3. public UdpClient(IPEndPoint localEp); 只接收数据报
4. public UdpClient(string hostname, int port); 接收和发送,使用4,指定接收远程主机IP 和 port. 自动分配本机IP和 port


1. 只需要发送数据报,(匿名发送) .对方无法判断发送方的端口
使用2进行实例化

2. 只接收数据报
使用3

3. 接收和发送
使用4,指定接收远程主机IP 和 port. 自动分配本机IP和 port


发送信息
public int Send(byte[] butter,int length,IPEndPoint ipe);

接收信息
public byte [] Receive(ref IPEndPoint remoteEP)
remoteEP 发送信息来的ip和端口号
//创建IPEndPoint
IPEndPoint remoteIPEndPoint new IPEndPoint(IPAddress.Any,0);
IPAddress.Any 任意ip地址
0 任意端口号

UDP广播和组播:实现一对多的传输方式
子网掩码 是IP 参照物.分网段用的!
比如 192.168.0.1 和192.168.0.2

1.子网掩码为 255.255.255.0
那么192.168.0.X 在同一个网段,能互相访问
2.希望掩码为 255.255.0.0
那么 192.168.X.X在同一个网段,能互相访问

IP地址分为两部分:
网络标志部分
主机标志部分


以上是关于C#网络编程的主要内容,如果未能解决你的问题,请参考以下文章

[C#] C#并发编程-异步编程基础-报告进度

5天玩转C#并行和多线程编程

学习C#编程经典书籍

C# 动态编程新特性与DLR剖析

在 C# 中以编程方式检查字符串是不是包含有效的 C# 代码

C# 管道式编程