TcpClient类和TcpListener类

(1)TcpClient的用途:

用于在同步阻止模式下通过网络来链接、发送和接受流数据,在此情况下,必须有侦听此连接的请求,而侦听的任务就交给TcpListener实例或Socket实例

(2)TcpClient的两种方法连接到侦听器

第一种:创建一个TcpClient,并调用3个可用的Connect方法之中的一个

另外一种:使用远程主机的主机名和port号创建TcpClient,此构造函数将自己主动尝试一个连接

(3)TcpClient的经常使用属性和方法

Available属性             获取已经从网络接收且可供读取的数据量

Connected属性             获取一个值。该值指示TcpClient的基础Socket是否已连接                           到远程主机

ReceiveBufferSize属性     获取或设置接收缓冲区的大小

SendBufferSize属性        获取或设置发送缓冲区的大小

Close方法                 释放TcpClient实例,不关闭基础连接

Connect方法               使用指定的主机名和port号将client连接到TCP主机

GetStream方法             返回用于发送和接收数据的NetwordStream

(4)TcpListener经常使用的属性和方法

LocalEndPoint属性                   获取当前TcpListener的基础EndPoint

Server属性                          获取基础网络Socket

AcceptSocket/AcceptTcpClient方法    接收挂起的链接请求

Start方法                           開始侦听传入的连接请求

Stop方法                            关闭侦听器

(5)实例代码(部分)

        private void button1_Click(object sender, EventArgs e)
{
//实例化一个TcpListener对象,并初始化为空
TcpListener tcplistener = null;
//实例化一个IPAddress对象,用来表示网络IP地址
IPAddress ipaddress = IPAddress.Parse(textBox1.Text);
//定义一个int类型变量。用来存储端口号
int port = Convert.ToInt32(textBox2.Text);
tcplistener = new TcpListener(ipaddress, port); //初始化TcpListener对象
tcplistener.Start(); //開始TcpListener侦听
richTextBox1.Text = "等待连接...\n";
TcpClient tcpclient = null; //实例化一个TcpClient对象。并赋值为空
if (tcplistener.Pending()) //推断是否有挂起的连接请求
tcpclient = tcplistener.AcceptTcpClient(); //使用AcceptTcpClient初始化TcpClient对象
else
tcpclient = new TcpClient(textBox1.Text, port); //使用TcpClient的构造函数初始化TcpClient对象
richTextBox1.Text += "连接成功!\n";
tcpclient.Close(); //关闭TcpClient连接
tcplistener.Stop(); //停止TcpListener侦听
}

UdpClient类

(1)UdpClient类用于在阻止同步模式下发送和接收无连接的UDP数据。

UDP是无连接的传输协议,所以不须要在发送和接收数据前建立远程主机连接。

(2)两种方法建立默认远程主机

第一种:使用远程主机名和port号作为參数创建UdpClient类的实例

另外一种:创建UdpClient类的实例,然后调用Connect类的实例

(3)UdpClient类经常使用的属性和方法

Available属性           获取从网络接收的可读取的数据量

Client属性              获取或设置基础网络的Socket

Close方法               关闭UDP连接

Connect方法             简历默认远程主机

Receive方法             返回已由远程主机发送的UDP数据报

Send方法                将UDP数据报发送到远程主机

(3)实例代码:

textBox1:ip地址

textBox2:port号

textBox3:发送的信息

richTextBox:显示信息

        private void button1_Click(object sender, EventArgs e)
{
richTextBox1.Text = string.Empty;
//实例化UdpClient对象
UdpClient udpclient = new UdpClient(Convert.ToInt32(textBox2.Text));
//调用UdpClient对象的Connect建立默认远程主机
udpclient.Connect(textBox1.Text, Convert.ToInt32(textBox2.Text));
//定义一个字节数组,用来存放发送到远程主机的信息
Byte[] sendBytes = Encoding.Default.GetBytes(textBox3.Text);
//调用UdpClient对象的Send方法将Udp数据报发送到远程主机
udpclient.Send(sendBytes, sendBytes.Length);
//实例化IPEndPoint对象。用来显示响应主机的标识
IPEndPoint ipendpoint = new IPEndPoint(IPAddress.Any, 0);
//调用UdpClient对象的Receive方法获得从远程主机返回的Udp数据报
Byte[] receiveBytes = udpclient.Receive(ref ipendpoint);
//将获得的Udp数据报转换为字符串形式
string returnData = Encoding.Default.GetString(receiveBytes);
richTextBox1.Text = "接收到的信息:" + returnData.ToString();
//使用IPEndPoint对象的Address和Port属性获得响应主机的IP地址和port号
richTextBox1.Text += "\n这条信息来自主机" + ipendpoint.Address.ToString()
+ "上的" + ipendpoint.Port.ToString() + "port";
//关闭UdpClient连接
udpclient.Close();
}

winform网络编程之TcpClient类,TcpListener类和UdpClient类的更多相关文章

  1. Java网络编程之TCP

    Java网络编程之TCP ​ TCP主要需要两个类:Socket和ServerSocket,Socket是客户端连接服务器时创建,参数需要指定服务器的ip和端口,ServerSocket是服务器端创建 ...

  2. [深入浅出WP8.1(Runtime)]网络编程之HttpClient类

    12.2 网络编程之HttpClient类 除了可以使用HttpWebRequest类来实现HTTP网络请求之外,我们还可以使用HttpClient类来实现.对于基本的请求操作,HttpClient类 ...

  3. 网络编程之HttpClient类(转)

    12.2 网络编程之HttpClient类 除了可以使用HttpWebRequest类来实现HTTP网络请求之外,我们还可以使用HttpClient类来实现.对于基本的请求操作,HttpClient类 ...

  4. 网络编程之Socket & ServerSocket

    网络编程之Socket & ServerSocket Socket:网络套接字,网络插座,建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP ...

  5. 网络编程之socket

    网络编程之socket socket:在网络编程中的一个基本组件,也称套接字. 一个套接字就是socket模块中的socket类的一个实例. 套接字包括两个: 服务器套接字和客户机套接字 套接字的实例 ...

  6. python3网络编程之socketserver

    本节主要是讲解python3网络编程之socketserver,在上一节中我们讲到了socket.由于socket无法支持多用户和多并发,于是就有了socket server. socket serv ...

  7. 网络编程之UDP编程

    网络编程之UDP编程 UDP协议是一种不可靠的网络协议,它在通信的2端各建立一个Socket,但是这个Socket之间并没有虚拟链路,这2个Socket只是发送和接受数据的对象,Java提供了Data ...

  8. 网络编程之socketserver

    网络编程之socketserver """ socketserver.py 中的5个基础类 +------------+ | BaseServer | +-------- ...

  9. Java网络编程之TCP、UDP

    Java网络编程之TCP.UDP 2014-11-25 15:23 513人阅读 评论(0) 收藏 举报 分类: java基础及多线程(28) 版权声明:本文为博主原创文章,未经博主允许不得转载.   ...

随机推荐

  1. Windows Phone SDK 8/8.1 官方下载

    Windows Phone SDK 8.1 update英文版http://download.microsoft.com/download/E/7/D/E7D9744A-06A6-46FB-AEA4- ...

  2. OPC服务器开发浅谈 — 服务器模型(转)

    这里主要讨论的是OPC Data Access 2.0服务器的开发,在掌握了这个最常用的OPC服务器开发之后,对其它类型的OPC服务器,如A&E.HDA等就可以触类旁通了. 一个OPC服务器的 ...

  3. wrap ConcurrentDictionary in BlockingCollection

    ConcurrentDictionary<int, BlockingCollection<string>> mailBoxes = new ConcurrentDictiona ...

  4. Appium+python自动化5-Appium Inspector

    前言    appium Inspector从入门到放弃!反正你都打开了,那就看下为什么要放弃吧! Appium Inspector是appium自带的一个元素定位工具,上一篇介绍了如何使用uiaut ...

  5. 转: gob编解码

    要让数据对象能在网络上传输或存储,我们需要进行编码和解码.现在比较流行的编码方式有JSON,XML等.然而,Go在gob包中为我们提供了另一种方式,该方式编解码效率高于JSON.gob是Golang包 ...

  6. UILabel混合显示动画效果

    UILabel混合显示动画效果 效果 源码 https://github.com/YouXianMing/Animations // // MixedColorProgressViewControll ...

  7. 《Windows核心编程》第1章——错误处理

    GetLastError: GetLastError返回错误编码,即便出错函数后边跟随一个正确执行了的函数,也不会覆盖原先的错误代码: 考虑多线程的情况.子线程中的错误代码不会被主线程捕获: 但是子函 ...

  8. linux usb信息查看与调试

    lsusb cat /sys/kernel/debug/usb/devices T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12   M ...

  9. 【BZOJ】【3668】【NOI2014】起床困难综合症

    贪心 位运算的题……基本都是按位来做的?... 从高位到低位,贪心来搞就可以了…… 这都算不上是数位DP吧= = /****************************************** ...

  10. 线程池的corePoolSize、maximumPoolSize和poolSize

    什么是线程池: 为了避免系统频繁的创建和销毁线程,我们可以将创建的线程进行复用.在线程池中总有那么几个活跃的线程,也有一定的最大值限制,一个业务使用完线程之后,不是立即销毁而是将其放入到线程池中,从而 ...