winform网络编程之TcpClient类,TcpListener类和UdpClient类
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类的更多相关文章
- Java网络编程之TCP
Java网络编程之TCP TCP主要需要两个类:Socket和ServerSocket,Socket是客户端连接服务器时创建,参数需要指定服务器的ip和端口,ServerSocket是服务器端创建 ...
- [深入浅出WP8.1(Runtime)]网络编程之HttpClient类
12.2 网络编程之HttpClient类 除了可以使用HttpWebRequest类来实现HTTP网络请求之外,我们还可以使用HttpClient类来实现.对于基本的请求操作,HttpClient类 ...
- 网络编程之HttpClient类(转)
12.2 网络编程之HttpClient类 除了可以使用HttpWebRequest类来实现HTTP网络请求之外,我们还可以使用HttpClient类来实现.对于基本的请求操作,HttpClient类 ...
- 网络编程之Socket & ServerSocket
网络编程之Socket & ServerSocket Socket:网络套接字,网络插座,建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP ...
- 网络编程之socket
网络编程之socket socket:在网络编程中的一个基本组件,也称套接字. 一个套接字就是socket模块中的socket类的一个实例. 套接字包括两个: 服务器套接字和客户机套接字 套接字的实例 ...
- python3网络编程之socketserver
本节主要是讲解python3网络编程之socketserver,在上一节中我们讲到了socket.由于socket无法支持多用户和多并发,于是就有了socket server. socket serv ...
- 网络编程之UDP编程
网络编程之UDP编程 UDP协议是一种不可靠的网络协议,它在通信的2端各建立一个Socket,但是这个Socket之间并没有虚拟链路,这2个Socket只是发送和接受数据的对象,Java提供了Data ...
- 网络编程之socketserver
网络编程之socketserver """ socketserver.py 中的5个基础类 +------------+ | BaseServer | +-------- ...
- Java网络编程之TCP、UDP
Java网络编程之TCP.UDP 2014-11-25 15:23 513人阅读 评论(0) 收藏 举报 分类: java基础及多线程(28) 版权声明:本文为博主原创文章,未经博主允许不得转载. ...
随机推荐
- Android设备运用Clockworkmod Recovery恢复模式安装定制的Rom
Clockworkmod Recovery是一个由Cyanogen团队开发的用于Android设备的第三方定制Recovery恢复模式,也称为CWM Recovery,具体它有什么用处呢?请看关于Go ...
- mysql 源代码编绎
http://blog.chinaunix.net/uid-20723616-id-769326.html https://software.intel.com/zh-cn/blogs/2010/08 ...
- [转载] C# matlab联合编程简介
原作者 文月 主要操作说明: 1. 找到matlab安装目录下的MCRInstaller.exe安装 MCRInstaller.exe 在安装目录下的 ..\MATLAB7\toolbox\comp ...
- iPhone应用提交流程:如何将App程序发布到App Store-转
对于刚加入iOS应用开发行列的开发者来说,终于经过艰苦的Coding后完成了第一个应用后最重要的历史时刻就是将应用程序提交到iTunes App Store.Xcode 4.2开发工具已经把App提交 ...
- 解决小米手机不能运行Android Studio程序的问题
转载自:解决小米手机不能运行Android Studio程序的问题 问题描述 Android Studio升级到2.3版本之后,小米手机MIUI8不能运行Android Studio程序,报如下错误: ...
- cocos2d-x avdrid 试例
今天将cocos2d-x的示例项目tests编译到android真机运行,以及如何创建cocos2d-x的android项目. 打开cocos2d-x的tests项目,路径为:D:\cocos2d-x ...
- .NET:“事务、并发、并发问题、事务隔离级别、锁”小议,重点介绍:“事务隔离级别"如何影响 “锁”?
备注 我们知道事务的重要性,我们同样知道系统会出现并发,而且,一直在准求高并发,但是多数新手(包括我自己)经常忽略并发问题(更新丢失.脏读.不可重复读.幻读),如何应对并发问题呢?和线程并发控制一样, ...
- CASpringAnimation的使用
CASpringAnimation的使用 效果 源码 https://github.com/YouXianMing/Animations // // CASpringAnimationControll ...
- Android图片加载框架最全解析(四),玩转Glide的回调与监听
大家好,今天我们继续学习Glide. 在上一篇文章当中,我带着大家一起深入探究了Glide的缓存机制,我们不光掌握了Glide缓存的使用方法,还通过源码分析对缓存的工作原理进行了了解.虽说上篇文章和本 ...
- oracle和mysql功能相同的函数
wm_concat ---->mysql 的group_concat decode (两条件的)----->mysql 的 if decode (3个及以上条件的)---------> ...