C# socket编程TcpClient与TcpListener UdpClient
前言
- TCPClient与TCPListener是对socket的一层封装
- 使用起来更加方便
- 他们用NetworkStream类表示网络,使用GetStream方法返回网络流,然后调用read和get方法
- NetworkStream 不拥有协议类的基础套接字,因此关闭它并不影响套接字。
- UdpClient 类使用字节数组保存 UDP 数据文报。使用 Send 方法向网络发送数据,使用 Receive 方法接收传入的数据文报。
TCP代码实现
class Program {static void Main(string[] args) {//1,TcpListener对socket进行了一层封装,这个类里面自己会去创建socket对象TcpListener listener = new TcpListener(IPAddress.Parse("192.168.0.112"),7788);//2,开始进行监听listener.Start();//3,等待客户端连接过来TcpClient client = listener.AcceptTcpClient();//4,取得客户端发送过来的数据NetworkStream stream = client.GetStream();//得到了一个网络流 从这个网络流可以取得客户端发送过来的数据byte[] data = new byte[1024];//创建一个数据的容器,用来承接数据while (true){//0 表示从数组的哪个索引开始存放数据//1024表示最大读取的字节数int length = stream.Read(data, 0, 1024);//读取数据string message = Encoding.UTF8.GetString(data, 0, length);Console.WriteLine("收到了消息:" + message);}stream.Close();client.Close();listener.Stop();//停止监听Console.ReadKey();}}
class Program {static void Main(string[] args) {//当我们创建tcpclient对象的时候,就会跟server去建立连接TcpClient client = new TcpClient("192.168.0.112",7788);NetworkStream stream = client.GetStream();//通过网络流进行数据的交换//read用来读取数据,write用来写入数据其实就是发送数据//利用一个死循环,重复向服务器端发送数据while (true){string message = Console.ReadLine();byte[] data = Encoding.UTF8.GetBytes(message);stream.Write(data, 0, data.Length);}stream.Close();client.Close();Console.ReadKey();}}
UDP实现
- 客户端实现
class Program {static void Main(string[] args) {//创建udpclient对象UdpClient client = new UdpClient();while (true){string message = Console.ReadLine();byte[] data = Encoding.UTF8.GetBytes(message);client.Send(data, data.Length, new IPEndPoint(IPAddress.Parse("192.168.0.112"), 7788));}client.Close();Console.ReadKey();}}
- 服务端实现
class Program {static void Main(string[] args) {//创建udpclient 绑定ip跟端口号UdpClient udpClient = new UdpClient(new IPEndPoint(IPAddress.Parse("192.168.0.112"),7788));while (true){//接收数据IPEndPoint point = new IPEndPoint(IPAddress.Any, 0);byte[] data = udpClient.Receive(ref point);//通过point确定数据来自哪个ip的哪个端口号 返回值是一个字节数组,就是我们的数据string message = Encoding.UTF8.GetString(data);Console.WriteLine("收到了消息:" + message);}udpClient.Close();Console.ReadKey();}}
C# socket编程TcpClient与TcpListener UdpClient相关推荐
- C# Socket网络通信_TCP(TcpListener和TcpClient)
简单Socket-Tcp通信 在本文中涉及到通信,仅做简单的通信(服务端接受消息,由客户端发出消息) 如有需要,根据需求可直接copy使用 1.关键字-TcpListener 需要引用命名空间: us ...
- C# Socket 编程详解
Microsoft.Net Framework为应用程序访问Internet提供了分层的.可扩展的以及受管辖的网络服务,其名字空间System.Net和 System.Net.Sockets包含丰富的 ...
- 网络Socket编程
Microsoft.Net Framework为应用程序访问Internet提供了分层的.可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类 ...
- C# Socket编程(5)使用TCP Socket
TCP 协议(Transmission Control Protocol,传输控制协议)是TCP/IP体系中面向连接(connection oriented)的传输层(transport layer) ...
- PERL 使用IO::Socket::INET模块实现socket编程
In this article, let us discuss how to write Perl socket programming using the inbuilt socket module ...
- 多线程下SOCKET编程
SOCKET编程往往离不开多线程,说到多线程,总的说来还是一个比较复杂的东西,尤其是业务逻辑变得复杂的时候,有时候或者说经常,会弄得人头晕脑胀.但是C#,相对好一点,因为微软封装了,帮我们做很多工作, ...
- [linux] Linux网络之Socket编程入门
目录 1. 前言 2. 网络基础 2.1 协议 2.1.1 TCP和UDP协议 2.2 网络的层状结构 2.3 一台主机向另一台主机的发送数据的流向 2.4 IP和MAC地址 2.5 端口 2.6 网 ...
- 初识网络及socket编程基础
理解源IP地址和目的IP地址 在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址. 源ip地址就是发送端ip,目的ip地址就是接收端ip 思考: 我们光有IP地址就可以完成通 ...
- 网络聊天工具Socket编程心得
首先要了解TCP协议通信的流程: 1.服务器端首先创建服务器套接字 2.服务器套接字监听一个端口,等待客户端的请求 3.客户端创建一个客户端套接字 4.客户端向服务器发送请求 5.服务器确认与客户端的 ...
- Go中的Socket编程
在很多底层网络应用开发者的眼里一切编程都是Socket,话虽然有点夸张,但却也几乎如此了,现在的网络编程几乎都是用Socket来编程.你想过这些情景么?我们每天打开浏览器浏览网页时,浏览器进程怎么和W ...
最新文章
- Linux运维工程师发展前景
- SLAM | 视觉SLAM中特征点法与直接法结合:SVO
- vagrant学习笔记
- linux下使用free命令查看实际内存占用
- 如何将.py文件转换为.exe
- azkaban修改MySQL配置上传包的大小上限
- POJ - 1328 Radar Installation(贪心+思维)
- 修改了sql默认路径无法登录服务器,PostgreSQL错误'无法连接到服务器:没有这样的文件或目录'...
- Hadoop精华问答 | Hadoop 和Spark有什么区别?
- UILabel常用属性
- 培养杰出程序员的捷径
- 入门学习asp.net mvc
- 深度学习(目标检测。图像分割等)图像标注工具汇总
- 洛谷 P4344 [SHOI2015]脑洞治疗仪
- 英语常用九种时态记忆要点
- html表格筛选排序规则,excel表格的排序规则与排序技术
- 【代码审计】51 TP5框架、无框架 变量覆盖反序列化
- 【论文导读】Continuity Scaling: A Rigorous Framework for Detecting andQuantifying Causality Accurately
- js正则只能匹配正整数或零
- win7系统提示actionscript错误如何解决
热门文章
- HTML5 — 知识总结篇《VII》【图片元素】
- Android SurfaceView动画(一)
- rk3399_android7.1耳机拔插ADC检测
- SQlite数据库框架:LitePal
- forEach,for in,for of循环的用法
- XMLHttpRequest.responseType
- 设置配置高可用的Mysql双机热备(Mysql_HA)
- 游戏筑基开发之字符串的注意点(C语言)
- 十九、K8s集群设置1- kube-bench
- 通过napalm-huawei-vrp模块对华为交换机信息进行分析(ENSP模拟器)