博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TcpClient和TcpListener 类的使用-编写一个点对点聊天工具(初级入门篇)
阅读量:6989 次
发布时间:2019-06-27

本文共 3043 字,大约阅读时间需要 10 分钟。

TcpClient类和TcpListener类属于.NET框架下网络通信中的应用层类,为Socket通信提供了更简单,对用户更为友好的接口。应用层类比位于底层的Socket类提供了更高层次的抽象,封装了套接字的创建,不需要处理连接的细节。

TcpClient类以更高的抽象程度提供TCP服务的基础,因此许多应用层次上的通信协议,比如FTP传输协议、HTTP超文本传输协议都直接创建在TcpClient等类之上。TcpClient类直接为客户端设计,提供了通过网络连接发送和接收数据的简单方法;TcpListener类用于服务器端,用来监视TCP端口上客户端的请求。

1.TcpClient类

要建立TCP连接,应该提供IP地址和端口号。TcpClient类有三种构造函数。

(1)public TcpClient():使用本机默认的IP地址和默认的端口0来创建TCP连接。

(2)public TcpClient(IPEndPoint):IPEndPoint指定在建立远程连接时所使用的本机IP地址和端口号。

(3)public TcpClient(string,int):初始化TcpClient类的新实例,并连接到指定主机上的制定端口。

需要说明的是,在使用前两种构造函数的时候,只是实现了TcpClient实例对象与IP地址和Port端口的绑定,要完成连接,还需要显示地用Connect方法指定与远程主机的连接。

在网络数据接收和发送方面,TcpClient类使用NetworkStream网络流处理技术,使得读写数据更加方便直观,而不需考虑具体传输的内容。在使用GetStream方法获得用于发送和接收数据的网络流之后,就可以使用标准流读写方法Write和Read来发送和接收数据了。

2.TcpListener类

TcpListener类用于监视TCP端口上客户端的请求,通过绑定本机IP地址和端口(IP地址和端口应与客户端请求一致)来创建TcpListener对象实例,由Start()方法启动侦听;当TcpListener侦听到客户端连接后,根据客户端的请求方式来处理请求,即如果是Socket连接请求,则使用AcceptSocket方法,如果是TcpClient连接请求,则使用AcceptTcpClient方法。最后要关闭使用的连接

tcpclient和socket的区别?

TcpClient是在Socket的基础上运行的。
Socket完全可以涵盖TcpClient,只不过TcpClient为了简化一部分Socket的功能。
Socket支持TCP,UDP,IP包,Stream,Dgram等诸多类型
而TcpClient只支持TCP和Stream
 
实例: TcpClient和TcpListener 类的使用-编写一个点对点聊天工具(简单入门演示,客户端和服务端都是在本机)
  服务器端代码:
class Program    {        static void Main(string[] args)        {            IPAddress localAddr = IPAddress.Parse("127.0.0.1");//IP地址类,建立一个IP地址对象            TcpListener server = new TcpListener(localAddr, 13000);//使用IP和端口建立侦听器            server.Start();//开始侦听            Console.WriteLine("等待一个连接");            TcpClient client = server.AcceptTcpClient();//接受一个连接,并创建一个服务器端TcpClient            Console.WriteLine("客户端已经连接");            //创建网络流相关的读写器            NetworkStream stream = client.GetStream();            StreamReader sr = new StreamReader(stream);            StreamWriter sw = new StreamWriter(stream);            while (true)            {                Console.WriteLine("客户端:"+sr.ReadLine());//从客户端接受数据                string msg = Console.ReadLine();                sw.WriteLine(msg);//向客户端发送数据                sw.Flush();            }            client.Close();        }    }
  客户端代码:
class Program    {        static void Main(string[] args)        {            IPAddress serverAddr = IPAddress.Parse("127.0.0.1");            //创建一个TcpClient            TcpClient client = new TcpClient();            //向服务器发送连接请求,需要与服务端的IP和端口一致(节点通信)            client.Connect(serverAddr, 13000);            //创建流读写器            NetworkStream stream = client.GetStream();            StreamReader sr = new StreamReader(stream);            StreamWriter sw = new StreamWriter(stream);            while (true)            {                string msg = Console.ReadLine();                //向服务器端发送数据                sw.WriteLine(msg);                sw.Flush();                //从服务器端读取数据                Console.WriteLine("服务器:"+sr.ReadLine());            }            client.Close();        }    }
 
  效果展示:
先启动服务端,再启动客户端,客户端发送数据,服务端接受,然后服务端发送数据数据,客户端同样可以接收。往复发送接受,完成点对点聊天通信
 

转载于:https://www.cnblogs.com/lqsilly/archive/2013/02/19/2916559.html

你可能感兴趣的文章
存储在图的形式——邻接列表
查看>>
[CareerCup] 4.5 Validate Binary Search Tree 验证二叉搜索树
查看>>
iOS开发网络篇—数据安全
查看>>
ChibiOS/RT 2.6.9 CAN Low Level Driver for STM32
查看>>
网络请求的基本知识《极客学院 --AFNetworking 2.x 网络解析详解--1》学习笔记...
查看>>
12864 显示各种图形圈
查看>>
【SSH三个框架】Hibernate第十篇基础:inverse属性具体解释
查看>>
时间在匆匆忙忙中就过去了
查看>>
几种颜色模型的转换公式
查看>>
C# 之 遍历本地文件夹下的所有文件
查看>>
Linux中断(interrupt)子系统之三:中断流控处理层【转】
查看>>
我们将与操作系统工作谈一场无私的爱──《云情人》思考
查看>>
hdu1845 Jimmy’s Assignment --- 完整匹配
查看>>
vs2013中国集
查看>>
IOS加强知识(1)理解力Objective-C
查看>>
BZOJ 2878([Noi2012]-失落的游乐园树DP+出站年轮加+后市展望DP+vector的erase)
查看>>
ECSHOP订单自动确认
查看>>
Odoo SSO 单点登录
查看>>
【转】向HTML中插入视频并兼容所有浏览器的方法
查看>>
I.MX6 I2C DS1337 disable square-wave output
查看>>