winform网络编程(三)

TcpClient类和TcpListener类

(1)TcpClient的用途:

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

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

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

第二种:使用远程主机的主机名和端口号创建TcpClient,此构造函数将自动尝试一个连接

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

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

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

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

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

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

Connect方法               使用指定的主机名和端口号将客户端连接到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)两种方法建立默认远程主机

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

第二种:创建UdpClient类的实例,然后调用Connect类的实例

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

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

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

Close方法               关闭UDP连接

Connect方法             简历默认远程主机

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

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

(3)实例代码:

textBox1:ip地址

textBox2:端口号

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地址和端口号
            richTextBox1.Text += "\n这条信息来自主机" + ipendpoint.Address.ToString()
                + "上的" + ipendpoint.Port.ToString() + "端口";
            //关闭UdpClient连接
            udpclient.Close();
        }

winform网络编程(三)

时间: 2024-08-10 14:21:29

winform网络编程(三)的相关文章

网络编程模型及网络编程三要素

网络模型 计算机网络之间以何种规则进行通信,就是网络模型研究问题. 网络模型一般是指 OSI(Open SystemInterconnection开放系统互连)参考模型 TCP/IP参考模型 网络模型7层概述: 1.物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由1.0转化为电流强弱来进行传输,到达目的地后在转化为1.0,也就是我们常说的数模转换与模数转换).这一层的数据叫做比特. 2. 数据链路层:主要将从物理层接收的数

winform网络编程(二)

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了.这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies .disc_copies都可能会发生. 如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2 mnesia过载分析 1.抛出警告是在mnesia 增加dump

iOS网络编程(三) 异步加载及缓存图片---->SDWebImage

@SDWebImage提供一个UIImageView的类别以支持加载来自网络的远程图片.具有缓存管理.异步下载.同一个URL下载次数控制和优化等特征. @SDWebImage的导入1.https://github.com/rs/SDWebImage 下载SDWebImage开源包2.将类包拖入工程,再导入MapKit.framework.ImageIO.framework两个框架3.SDWebImage是支持ARC的,在MRC的工程中要注意,可参考MRC工程配置ARC4.注意:SDWebImag

winform网络编程(一)

课设要求做windows下的socket通信编程,没有办法,恶补吧.一向不喜欢网络编程的我只能慢慢来,说实话不是不喜欢,是怕麻烦. 计算机有那么多层的结构,每层又有那么多协议,明白每个协议的内容和作用,对通信的流程有很清晰的了解,对传输的数据明白怎样进行解析,明白怎样唯一确定到网络中的某个特定的计算机,怎样解析DNS等等,特别是最烦网络这一层,什么ip,dns,socket,tcp,http,udp等等真的是傻傻分不清楚.. 其他先不谈,只能先说C#下的网络编程了. 1.明确什么是端口port:

网络编程三素概述

1.1网络编程概述计算机网络 ●是指将地理位置不同的具有独立功能的多 台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统 网络编程●在网络通信协议下, 实现网络互连的不同计算机上运行的程序间可以进行数据交换 网络编程三要素 IP地址●要想让网络中的计算 机能够互相通信,必须为每台计算机指定一个标识号, 通过这个标识号来指定要接收数据的计算机和识别发送的计算机,而IP地址就是这个标识号.也就是设备的标识 端口●网

Linux 网络编程三(socket代码详解)

//网络编程客户端 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h>//htons()函数头文件 #include <ne

网络编程三---多线程/进程解决并发问题

前文列出的代码给大家展示了一个最简单的网络程序,但正如文章末尾所提的,这个最简单的网络程序最大的缺点是服务端一次只能服务一个客户端,就比如说你去吃饭,饭店只有一个服务员, 而且服务员在客户离开之前只能为一个客户服务,也就是说你只能等待你前面的客户吃好饭离开了,然后你才能进去吃饭,而在你吃饭的时候时候,你后面来的人都得等你吃完饭才能轮到你后面一个人吃饭.这种模式的缺点很明显,因为在你进去点好菜到买单前的这段时间,这个服务员都是空闲的,为什么不让服务员在这个空闲时间让其他客户进来服务员为他点菜呢?在

网络编程三要素

1.ip    端口号     协议 ip地址=网络号+主机号 端口号:用于表明消息给哪个程序处理的.其中0~1023是公认端口,1024~49151是注册端口.一共有0~65535个端口. UDP协议:1.将数据封装为数据包,传输时不需要建立连接. 2.每个数据包的限制大小64K中 3.不可靠传输,传输速度快 TCP协议:(打电话.文件传输) 1.面向连接,有特有的通道 2.传输比较大的数据 3.三次握手机制建立连接,是可靠协议 4.通信前必须建立连接:效率低 2.网络通讯(Socket通讯)

Java高并发网络编程(三)NIO

从Java 1.4开始,Java提供了新的非阻塞IO操作API,用意是替代Java IO和Java Networking相关的API. NIO中有三个核心组件: Buffer缓冲区 Channel通道 Selector选择器 一.Buffer缓冲区 缓冲区本质上是一个可以写入数据的内存块(类似数组),然后可以再次读取.此内存块包含在NIO Buffer对象中,该对象提供了一组方法,可以更轻松地使用内存块. 相比较直接对数组的操作,BufferAPI更容易操作和管理. 使用Buffer进行数据写入