仿QQ设计程序教程ppt课件_第1页
仿QQ设计程序教程ppt课件_第2页
仿QQ设计程序教程ppt课件_第3页
仿QQ设计程序教程ppt课件_第4页
仿QQ设计程序教程ppt课件_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、8.1 工程的创建工程的创建8.2 数据包的设计数据包的设计8.3 主界面的设计主界面的设计8.4 聊天窗口的设计聊天窗口的设计8.5 读者完成部分读者完成部分L8.1 工程的创建工程的创建L8.3 主界面的设计主界面的设计L8.5 读者完成部分读者完成部分1. MyQQ的引见的引见当双击所要聊天对象时弹出聊天窗口,聊天窗口如图当双击所要聊天对象时弹出聊天窗口,聊天窗口如图8.2所示,所示,用于发用于发送信息和显示聊天信息。送信息和显示聊天信息。 图8.1 MyQQ主界面 图8.2 聊天窗口 2所要掌握的主要知识点所要掌握的主要知识点 1网络通讯知识点,网络通讯知识点,Socket、TcpLi

2、stener、TcpClient和和UdpClient类。类。 2线程知识点,线程知识点,Thread类。类。 3熟习熟习ListView控件、控件、NotifyIcon组件的运用。组件的运用。MyQQ运用程序主要讲述网络通讯和多线程,包括主界面窗体和聊天窗口窗体这两个窗体,主界面主要显示在线的人物以及选择聊天对象,聊天窗口用于发送聊天信息和接受聊天信息。此工程中同时还包括封装数据包的类DataPacket。工程的创建步骤:1创建工程运转VS2019,执行【文件】【新建】【工程】命令,在弹出的“新建工程对话框中选中“Windows窗体运用程序模板,选择工程存放位置并输入工程称号为“MyQQ,单

3、击“确定按钮完成工程的创建。2添加窗体翻开“处理方案资源管理器窗口,右击工程名“MyQQ,依次执行快捷菜单中的“添加“新建项命令,在弹出的“添加新项对话框中选中“Windows窗体模板,运用默许称号“Form1,单击“添加按钮完成窗体的添加。按照同样的方法再添加一个窗体,运用默许命名。其中“Form1为主界面窗体,“Form2为聊天窗口窗体。3添加类添加类DataPacket在在“处理方案资源管理器窗口中,右击工程名处理方案资源管理器窗口中,右击工程名“MyQQ,依次执行快捷菜单,依次执行快捷菜单中的中的“添加添加“新建项命令,在弹出的新建项命令,在弹出的“添加新项对话框中选中添加新项对话框中

4、选中“类模板,类模板,命名为命名为“DataPacket.cs并单击并单击“添加按钮。添加按钮。到此完成了整个工程的创建。到此完成了整个工程的创建。数据包格式包括“命令号、“发送端IP、“用户名长度、“用户名、“接受端IP和“内容6个部分。命令号是阐明此数据包用于所要执行的义务,发送端IP是指发送信息端的IP地址,用户名为发送端的用户名,用户名的字节数是指发送端的用户名的字节数,接受端IP是指所要发送到对方的IP地址,内容是指数据包所附带的信息。数据包的构造如图8.3所示。图8.3 数据包构造设计步骤:1. 添加命名空间翻开类DataPacket,由于此类中涉及网络,所以要添加如下命名空间:u

5、sing System.Net;2. 添加其他代码代码如下。主界面窗体运转后如图8.1所示,经过ListView控件和ImageList显示在线的人物以及选择聊天对象,经过StatusStrip控件显示在线人数以及包括“上线和“下线功能。设计步骤:1. 添加控件和组件在处理方案资源管理器中翻开“Form1.cs。将Form1窗体调整到适当大小,从工具箱中拖放1个“NotifyIcon组件、1个“ListView和1个“ImageList控件到此窗体中。参考图8.1所示摆放控件。2. 设置窗体和控件组件的属性设置窗体和控件组件的属性Form1的的Text属性值设置为属性值设置为“MyQQ,Ico

6、n设置为曾经预备好的图标,设置为曾经预备好的图标,MaximizeBox设置为设置为“False。1notifyIcon1的属性设置。的属性设置。Icon选择曾经预备好的图标,选择曾经预备好的图标,Text设置为设置为“MyQQ。2imageList1的属性设置。在其属性窗口中翻开的属性设置。在其属性窗口中翻开“ 按钮图标,弹出按钮图标,弹出“图像集合编辑器窗口,分别添加一些用于显示聊天对象的图标,如图图像集合编辑器窗口,分别添加一些用于显示聊天对象的图标,如图8.4所示。所示。图8.4 图像集合编辑器3listView1的属性设置。翻开listView1属性窗口,FullRowSelect和

7、View属性值分别设置为“True和“Title,MultiSelect设置为“False,StateImageList属性选择为“imageList1,Columns集合中分别添加3个“columnHeader成员。4statusStrip1的设置。分别添加一个“toolStripStatusLabel和一个“toolStripDropDownButton。toolStripStatusLabel1的Text属性设置为“在线人数 人,选中toolStripDropDownButton1Text,分别添加“上线和“下线选项,如图8.5所示,Image选择预备好的图标。图8.5 添加上下线3.

8、添加事件及代码添加事件及代码主窗口窗体包含有主窗口窗体包含有“窗体加载、窗体加载、“上线、上线、“下线、下线、“选择聊天对象和选择聊天对象和“调调整大小事件。整大小事件。1添加命名空间。由于涉及线程和网络的操作,所以添加命名空间如下:添加命名空间。由于涉及线程和网络的操作,所以添加命名空间如下:using System.Threading;using System.Net;using System.Net.Sockets;2添加字段。所添加的字段如下所示:添加字段。所添加的字段如下所示:private UdpClient UdpListen = new UdpClient(8000);priv

9、ate IPAddress myIP = Dns.GetHostEntry(Dns.GetHostName().AddressList0;/本机器本机器IP地址地址private string myName = Environment.UserName; /本机器用户名本机器用户名/*标识网络地址,初始化广播端口号标识网络地址,初始化广播端口号*/private IPEndPoint EndPoint = new IPEndPoint(IPAddress.Parse(55), 8000);private static bool MyState = false;/能否能

10、否为在线形状为在线形状3主界面中添加上线人的成员方法。经过数据包参数将此上线的人的用户名、IP地址以及图像显示在主界面中,并更新在线人数。代码如下:private void AddPerson(DataPacket dp) /添加聊天的人 ListViewItem lviUserName = new ListViewItem(); ListViewItem.ListViewSubItem lvsiComputerName = new ListViewItem.ListViewSubItem(); ListViewItem.ListViewSubItem lvsiIP = new ListVie

11、wItem.ListViewSubItem(); lvsiComputerName.Text = dpputerName; lvsiIP.Text = dp.FromIP.ToString(); int imagecount = listView1.Items.Count % imageList1.Images.Count; /选择图像 lviUserName.StateImageIndex = imagecount; lviUserName.SubItems.Add(lvsiComputerName); lviUserName.SubItems.Add(lvsiIP); listView1.

12、Items.Add(lviUserName); toolStripStatusLabel1.Text = 在线人数: + listView1.Items.Count + 人;/显示聊天人数4监听指定端口的广播地址UDP包的成员方法的代码。当接遭到数据包时,分析其包的命令,并执行相应的代码。代码如下所示。5添加“窗体加载事件及其代码。当窗体加载时就开启监听线程,切换到Form1的设计视图,双击窗体,添加代码,代码如下所示:private void Form1_Load(object sender, EventArgs e) /*开启监听线程*/ Thread myThread = new Thr

13、ead(new ThreadStart(this.ListenPort); myThread.IsBackground = true; myThread.Start(); Control.CheckForIllegalCrossThreadCalls = false;/忽略跨线程错误,这时会抛出异常6添加上下线事件及其代码。当单击“上线和“下线时分别发送“上线和“下线数据包。切换到设计视图并分别双击“上线和“下线,添加事件代码,代码如下。7添加选中聊天对象事件及其代码。当双击聊天对象时弹出聊天窗口并发生聊天恳求数据包。在listView1的事件窗口中双击DoubleClick,添加其事件代码,

14、代码如下:private void listView1_DoubleClick(object sender, EventArgs e) /聊天 string strChatIP = listView1.SelectedItems0.SubItems2.Text; IPAddress IPAddChatIP = IPAddress.Parse(strChatIP); Form2 form2 = new Form2(myIP, myName, IPAddChatIP); form2.Show(); /*发送聊天恳求数据包*/ DataPacket comeDataPacket = new Data

15、Packet(); comeDataPacketmandNo = 1; comeDataPacket.FromIP = myIP; comeDataPacket.NameLength = myName.Length; comeDataPacketputerName = myName; comeDataPacket.ToIP = IPAddChatIP; comeDataPacket.Content = 聊天恳求; byte sendb = comeDataPacket.PacketToBytes(); UdpListen.Send(sendb, sendb.Length, EndPoint);

16、/发送信息8添加封锁窗口事件及其代码。当封锁窗口退出程序时发送下线数据包。翻开Form1的事件窗口,双击“FormClosed,添加其事件代码,代码如下:private void Form1_FormClosed(object sender, FormClosedEventArgs e)/封锁窗口 下线ToolStripMenuItem_Click(null, null);/下线9添加调整大小事件。当最小化主界面时,最小化到义务栏形状通知区域中。翻开Form1的事件窗口,双击“Resize,添加其事件代码,代码如下:private void Form1_Resize(object sender

17、, EventArgs e) if (this.WindowState = FormWindowState.Minimized) this.Visible = false; /隐藏窗体 this.notifyIcon1.Visible = true; /在托盘中显示图标 10添加notifyIcon1的双击事件。翻开notifyIcon1的事件窗口,双击“DoubleClick,添加其事件代码,代码如下:private void notifyIcon1_DoubleClick(object sender, EventArgs e) this.Visible = true;/显示主窗口 this

18、.WindowState = FormWindowState.Normal; this.notifyIcon1.Visible = false; 4. 运转程序运转程序按【按【Ctrl+F5】组合键运转程序。选择上线选项,那么本人的图标、用户名和】组合键运转程序。选择上线选项,那么本人的图标、用户名和IP地址显示在主界面中。当最小化地址显示在主界面中。当最小化MyQQ时,进程图标显示在义务栏形状通知区时,进程图标显示在义务栏形状通知区域中。如图域中。如图8.6所示。所示。图8.6 MyQQ进程图标聊天窗口用于发送聊天信息给聊天对象并接受聊天对象的信息。在这里为了突出知识点和教学方便,运用传输控

19、制协议 (TCP)只实现发送信息给本人并接受信息。运转的界面如图8.2所示。设计步骤:1. 添加控件在处理方案资源管理器中翻开“Form2.cs。将Form2窗体调整到适当大小,从工具箱中拖放1个“toolStrip1、2个“TextBox和2个“Button控件到此窗体中。参考图8.2所示摆放控件。2. 窗体和控件属性设置翻开Form2的属性窗口,Text属性设置为“MyQQ,MaximizeBox、MinimizeBox和ShowIcon的属性值都设置为“False。StartPosition属性值设置为“CenterScreen。button1和button2的Text属性值设置为“发送

20、和“封锁。toolStrip1学生可以本人设计。3. 添加事件及代码添加事件及代码聊天窗口包含有聊天窗口包含有“发送和发送和“封锁事件。封锁事件。1添加命名空间。由于涉及线程、文件系统和网络的操作,所以添加命添加命名空间。由于涉及线程、文件系统和网络的操作,所以添加命名空间如下:名空间如下:using System.Net.Sockets;using System.Net;using System.IO;using System.Threading;2添加字段。所添加的字段如下所示:添加字段。所添加的字段如下所示:IPAddress myIP;/发送方的发送方的IP地址地址IPAddress

21、toIP;/接受方的接受方的IP地址地址string myName;/方式方的用户名方式方的用户名TcpListener tcpListener; /接受方用于接受方用于TCP监听监听TcpClient tcpClient;/发送方用于恳求与对方衔接发送方用于恳求与对方衔接Socket socket;Thread receThread;/发送信息线程发送信息线程3添加构造函数。此构造函数用于接纳从主界面传过来的发送方的IP地址,发送方的用户名以及接受方的IP地址。代码如下:public Form2(IPAddress myip,string myname,IPAddress toip) Ini

22、tializeComponent(); myIP = myip; toIP = toip; myName = myname;4添加监听端口并接受信息成员方法。监听3333端口并将接遭到的信息转换为字符串类型并显示在textBox1中,代码如下:private void receiveData() tcpListener = new TcpListener(IPAddress.Any, 3333);/新建TcpListener对象 while (true) tcpListener.Start(); /开场监听端口 socket = tcpListener.AcceptSocket();/接受衔接

23、恳求 byte buffter = new byte1024; /定义缓冲区 while (socket.Receive(buffter) != 0)/接受音讯 textBox1.Text += Encoding.Default.GetString(buffter); /转换为字符串并显示 socket.Close();/封锁衔接 tcpListener.Stop();/停顿监听 5添加窗体加载事件及其代码。当窗体加载时新建一个线程用于监听端口并接受音讯。切换到设计视图,双击Form2,添加其事件代码,代码如下:private void Form2_Load(object sender, Ev

24、entArgs e) receThread = new Thread(new ThreadStart(receiveData); /新建一个线程用于监听音讯 receThread.Start(); 6添加“发送按钮事件及其事件代码。“发送按钮用于和对方建立衔接并将信息发送给对方。双击“发送按钮,其事件代码如下:private void button1_Click(object sender, EventArgs e) tcpClient = new TcpClient(); tcpClient.Connect(toIP, 3333);/建立衔接 NetworkStream stream = t

25、cpClient.GetStream();/获取网络流 string strsent = myName + ( + myIP.ToString() + ) + DateTime.Now.ToString() + rn + textBox2.Text+rn;/显示发送者和发送时间 byte buftter = Encoding.Default.GetBytes(strsent);/将要发送的文本转换为字节流 stream.Write(buftter, 0, buftter.Length);/写入网络流中 stream.Close(); /封锁网络流 tcpClient.Close();/封锁衔接

26、7添加“封锁按钮事件及其事件代码。“封锁按钮用于终了线程和封锁窗体等。双击“封锁按钮,其事件代码如下:private void button2_Click(object sender, EventArgs e) receThread.Abort();/终了线程 if (tcpListener != null) tcpListener.Stop(); /停顿监听 this.Close();/封锁窗体4. 运转程序运转程序按【按【Ctrl+F5】组合键运转程序。选择】组合键运转程序。选择“上线选项,双击本人图标,在弹出的上线选项,双击本人图标,在弹出的聊天窗口中发送信息,运转的结果如图聊天窗口中发

27、送信息,运转的结果如图8.2所示。所示。思索到篇幅和知识点等要素,以上引见完成的MyQQ不是很完善并有一些缺陷。读者可将此MyQQ加以修正并完善。1在此实例中没有运用数据包内容部分,改写程序将所发送的聊天信息加载到数据包的内容部分并经过UDP效力方式来发送和接受聊天信息。2利用TCP方式在聊天窗口中添加文件传输功能。3添加聊天记录功能,将一切聊天信息记录下来并在聊天窗口添加读取聊天记录功能。4删除“主界面设计中的“Control.CheckForIllegalCrossThreadCalls = false;代码,运用线程间通讯完成。L1. 网络通讯网络通讯1同步方式同步方式同步方式是指发送方

28、发送数据包以后,不等接纳方呼应,就接着发送下一个同步方式是指发送方发送数据包以后,不等接纳方呼应,就接着发送下一个数据包。数据包。2异步方式异步方式异步方式是指当发送方发送一个数据包以后,不断等到接纳方呼应后,才可异步方式是指当发送方发送一个数据包以后,不断等到接纳方呼应后,才可以发送下一个数据包。以发送下一个数据包。3阻塞套接字阻塞套接字阻塞套接字是指在执行此套接字的网络调用时,直到调用胜利才前往,否那阻塞套接字是指在执行此套接字的网络调用时,直到调用胜利才前往,否那么此套接字就不断阻塞在网络调用上。么此套接字就不断阻塞在网络调用上。4非阻塞套接字非阻塞套接字非阻塞套接字是指在执行此套接字的

29、网络调用时,不论能否执行胜利,都立非阻塞套接字是指在执行此套接字的网络调用时,不论能否执行胜利,都立刻前往。刻前往。1. Dns类类IP地址是一种普遍运用于因特网、允许不同主机可以相互找到对方的寻址协地址是一种普遍运用于因特网、允许不同主机可以相互找到对方的寻址协议。议。IP地址由地址由4个十进制的数字号码所组成,而每一个号码的值为个十进制的数字号码所组成,而每一个号码的值为0255,这虽,这虽然处理了网络上计算机的识别问题,但是然处理了网络上计算机的识别问题,但是IP地址不易记忆,因此域名系统地址不易记忆,因此域名系统(DNS)被被开发出来,它专门用于将开发出来,它专门用于将IP地址转换成有

30、意义的文字,以方便识别记忆。地址转换成有意义的文字,以方便识别记忆。Dns 类类是一个静态类,它从是一个静态类,它从 Internet 域名系统域名系统 (DNS) 检索关于特定主机的信息。在检索关于特定主机的信息。在IPHostEntry 类的实例中前往来自类的实例中前往来自 DNS 查询的主机信息。假设指定的主机在查询的主机信息。假设指定的主机在 DNS 数据库中有多个入口,那么数据库中有多个入口,那么IPHostEntry 包含多个包含多个 IP 地址和别名。地址和别名。Dns类常用方法类常用方法及阐明如表及阐明如表8.1所示。所示。【例EX8_1】 设计WinForm运用程序用于获取指

31、定主机名的IP地址。 设计步骤:1新建WinForm工程新建WinForm工程并命名为“EX8_1。2添加控件并设置属性在Form1的设计视图中,将此窗体调整到适当的大小并将 “Text属性设为“获取主机IP地址。从工具箱中拖放1个Button、2个Label和2个TextBox控件到窗体中,按如图8.7所示方式规划控件。label1、label2和button1的Text属性值分别设置为“主机名、“IP地址:和“获取。3添加命名空间所要添加的命名空间为“using System.Net;。4添加事件及代码双击“获取按钮,其事件代码如下所示:private void button1_Click

32、(object sender, EventArgs e) textBox2.Text = ; try IPHostEntry hostInfo = Dns.GetHostEntry(textBox1.Text.Trim(); foreach (IPAddress ipadd in hostInfo.AddressList) textBox2.Text += ipadd.ToString() + rn; catch (Exception ex) MessageBox.Show(ex.Message.ToString(); 5运转程序按【Ctrl+F5】组合键运转程序,分别输入“和“,单击“获取按

33、钮结果如图8.7和图8.8所示。图8.7 “的IP地址图8.8 “的IP地址2. System.Net.Sockets命名空间命名空间System.Net.Sockets 命名空间为需求严密控制网络访问的开发人员提供了命名空间为需求严密控制网络访问的开发人员提供了 Windows Sockets (Winsock) 接口的托管实现。其中接口的托管实现。其中Socket类、类、TcpClient类、类、TcpListener类、类、UdpClinet类和类和NetWorkStrean类较为常用,下面对它们进展简单引类较为常用,下面对它们进展简单引见。见。1Socket类:用于管理衔接,实现类:用

34、于管理衔接,实现Berkeley通讯端接口,定义绑定、衔接通讯端接口,定义绑定、衔接网络端点以及传输数据所需的方法,提供处置端点衔接传输等细节所需求的功能。网络端点以及传输数据所需的方法,提供处置端点衔接传输等细节所需求的功能。WebRequest、TcpClient和和UdpClinet等类在内部运用这个类。等类在内部运用这个类。2TcpClient类:允许创建和运用类:允许创建和运用TCP衔接,该类创建于衔接,该类创建于Socket类的根底之类的根底之上并且封装了许多更高级的功能,防止开发人员处置衔接操作的相关细节。上并且封装了许多更高级的功能,防止开发人员处置衔接操作的相关细节。3Tcp

35、Listener类:允许监听传入的类:允许监听传入的TCP衔接恳求,倾听来自衔接恳求,倾听来自TCP客户端运用客户端运用程序的衔接要求,封装更高级的功能,运用这个类可以让用户防止处置一些衔接程序的衔接要求,封装更高级的功能,运用这个类可以让用户防止处置一些衔接效力的细节,以一种比较有效的方式,接纳倾听的衔接需求。效力的细节,以一种比较有效的方式,接纳倾听的衔接需求。4UdpClinet类:提供用户数据报类:提供用户数据报 (UDP) 网络效力。网络效力。 5NetWorkStream类:这个类是从类:这个类是从Stream派生出来的,专门用以处置网络派生出来的,专门用以处置网络方式的数据流,与

36、其他文件数据流的显著区别在于,这个类接纳方式的数据流,与其他文件数据流的显著区别在于,这个类接纳Socket类对象参类对象参数,对网络数据进展存取操作。数,对网络数据进展存取操作。3. 套接字套接字(Socket)区分不同运用程序进程间的网络通讯和衔接,主要有区分不同运用程序进程间的网络通讯和衔接,主要有3个参数:通讯的目的个参数:通讯的目的IP地址、运用的传输层协议地址、运用的传输层协议(TCP或或UDP)和运用的端口号。和运用的端口号。Socket原意是原意是“插座。插座。经过将这经过将这3个参数结合起来,与一个个参数结合起来,与一个“插座插座Socket绑定,运用层就可以和传输层绑定,运

37、用层就可以和传输层经过套接字接口,区分来自不同运用程序进程或网络衔接的通讯,实现数据传输经过套接字接口,区分来自不同运用程序进程或网络衔接的通讯,实现数据传输的并发效力。的并发效力。.NET Framework中的中的Socket类是类是Winsock32 API提供的套接字效力的托管代码提供的套接字效力的托管代码版本。在大多数情况下,版本。在大多数情况下,Socket类方法只是将数据封送到它们的本机类方法只是将数据封送到它们的本机Win32副本副本中,并处置任何必要的平安检查。中,并处置任何必要的平安检查。Socket类支持两种根本方式:同步和异步。在同步方式中,对执行网络操作类支持两种根本

38、方式:同步和异步。在同步方式中,对执行网络操作的函数如的函数如Send和和Receive的调用不断等到操作完成后才将控制权前往给调用程的调用不断等到操作完成后才将控制权前往给调用程序,而在异步方式中,这些调用立刻前往。序,而在异步方式中,这些调用立刻前往。在可以运用套接字与远程设备通讯之前,必需运用协议和网络地址信息初始化套接字。Socket类的构造函数具有指定套接字用来建立衔接的地址族、套接字类型和协议类型的参数等功能。在基于TCP/IP的网络上通讯的关键代码如下:Socket socket = new Socket(AddressFamily.InterNetwork, SocketTyp

39、e.Stream, ProtocolType.Tcp);运用UDP而不是TCP进展通讯的关键代码如下:Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);参数阐明如下:1AddressFamily:AddressFamily枚举,用来指定Socket类解析网络地址的规范地址族。2SocketType:SocketType枚举,用来指定套接字的类型。3ProtocolType:ProtocolType枚举,用来指定在Socket上通讯时运用的网络协议。创建Socket

40、类后,既可以开场与远程终结点的衔接,也可以接纳来自远程设备的衔接。4. Socket类的属性和方法类的属性和方法Visual C#经过创建经过创建Socket类的实例来实现类的实例来实现Socket的托管版本。在的托管版本。在Visual C# 中创中创建完建完Socket实例后,可以经过此实例后,可以经过此Socket实例的实例的Bind方法绑定到网络中指定的终结点,方法绑定到网络中指定的终结点,也可以经过其也可以经过其Connect方法向指定的终结点建立衔接。衔接创建终了后,就可以运方法向指定的终结点建立衔接。衔接创建终了后,就可以运用其用其Send或或SendTo方法将数据发送到方法将数

41、据发送到Socket;同样运用其;同样运用其Receive或或ReceiveFrom方方法从法从Socket中读取数据。在中读取数据。在Socket运用终了后,请运用其运用终了后,请运用其Shutdown方法禁用方法禁用Socket,并运用并运用Close方法封锁方法封锁Socket。表。表8.2和表和表8.3分别是分别是Socket类中的常用属性和方法及类中的常用属性和方法及其简要阐明。其简要阐明。【例EX8_2】 设计WinForm运用程序,将小写字母转换为大写字母,其中包括客户端和效力端,利用Socket将要转换的小写字母发送给效力端,效力端将接遭到的小写字母转换为大写字母并前往给客户端

42、。设计步骤:1新建客户端WinForm工程新建WinForm工程并命名为“EX8_2_client。2添加控件并设置属性在Form1的设计视图中,将此窗体调整到适当的大小并将 “Text属性设为“客户端。从工具箱中拖放1个Button、2个Label和2个TextBox控件到窗体中,按如图8.9所示方式规划控件。label1、label2和button1的Text属性值分别设置为“发送的字符串:、“接受并转换为大写的字符串:和“转换。3添加命名空间所要添加的命名空间为:using System.Net;using System.Net.Sockets;4添加事件及代码双击“转换按钮,其事件代码

43、如下所示。5新建效力端WinForm工程新建WinForm工程并命名为“EX8_2_server。6添加控件并设置属性在Form1的设计视图中将此窗体调整到适当的大小并将 “Text属性设为“效力端。从工具箱中拖放1个Button、1个Label和1个TextBox控件到窗体中,按如图8.10所示方式规划控件。label1和button1的Text属性值分别设置为“从客户端接受的字符串:、“开场监听。7添加命名空间所要添加的命名空间为:using System.Net;using System.Net.Sockets;8添加事件及代码双击“开场监听按钮,其事件代码如下所示。9运转程序运转此两个

44、程序,单击效力端的“开场监听按钮,在客户端中输入一些小写字符串并单击的“转换按钮,运转的结果如图8.9和图8.10所示。 图8.9 客户端 图8.10 效力端5. TcpClient类类TcpClient类为类为TCP网络效力提供客户端衔接。网络效力提供客户端衔接。TcpClient类提供了一些简单的方类提供了一些简单的方法,用于在同步阻塞方式下经过网络来衔接、发送和接纳流数据。法,用于在同步阻塞方式下经过网络来衔接、发送和接纳流数据。为使为使TcpClient衔接并交换数据,运用衔接并交换数据,运用TCP协议创建的协议创建的TcpListener或或Socket必需必需侦听能否有传入的衔接恳

45、求。可以运用下面两种方法之一衔接到该侦听器:侦听能否有传入的衔接恳求。可以运用下面两种方法之一衔接到该侦听器:1创建一个创建一个TcpClient,并调用三个可用的,并调用三个可用的Connect方法之一:方法之一:TcpClient tcpClient=new TcpClient();/创建一个创建一个TcpClient/*运用下面三种方法之一衔接到监听器运用下面三种方法之一衔接到监听器*/tcpClient.Connect (IPAddress, Int32) /运用指定的运用指定的IP地址和端口地址和端口号将客户端衔接到号将客户端衔接到 TCP 主机主机tcpClient.Connect

46、 (IPAddress, Int32) /运用指定的运用指定的IP地址和端口号将客户地址和端口号将客户端衔接到远程端衔接到远程TCP主机主机tcpClient.Connect (String, Int32) /将客户端衔接到指定主机上的指将客户端衔接到指定主机上的指定端口定端口2运用远程主机的主机名和端口号创建TcpClient。此构造函数将自动尝试一个衔接。TcpClient client = new TcpClient(hostname, port);要发送和接纳数据,可以运用GetStream方法来获取一个NetworkStream。调用NetworkStream的Write和Read方

47、法与远程主机之间发送和接纳数据。运用Close方法释放与TcpClient关联的一切资源。TcpClient的常用属性如表8.4所示,常用方法如表8.5所示。6. TcpListener类类TcpListener类从类从TCP网络客户端监听衔接。网络客户端监听衔接。TcpListener类提供一些简一方法,类提供一些简一方法,用于在阻塞同步方式下监听和接受传入衔接恳求。可运用用于在阻塞同步方式下监听和接受传入衔接恳求。可运用IPEndPoint、本地、本地IP地地址及端口号或者仅运用端口号,来创建址及端口号或者仅运用端口号,来创建TcpListener,创建监听器两种方法如下:,创建监听器两种

48、方法如下:1运用指定的本地终结点初始化运用指定的本地终结点初始化TcpListener类的新实例。类的新实例。 TcpListener tcpListener=new TcpListener (IPEndPoint) 2运用指定的本地运用指定的本地IP地址和端口号,监听能否有传入的衔接尝试。地址和端口号,监听能否有传入的衔接尝试。TcpListener tcpListener=new TcpListener (IPAddress, Int32) 可运用可运用TcpClient或或Socket来衔接来衔接TcpListener。可以将本地。可以将本地IP地址指定为地址指定为Any,将本地端口号指

49、定为将本地端口号指定为0假设希望根底效力提供程序为程序员分配这些值。假假设希望根底效力提供程序为程序员分配这些值。假设选择这样做,可在衔接套接字后运用设选择这样做,可在衔接套接字后运用 LocalEndpoint 属性来标识已指定的信息。属性来标识已指定的信息。Start方法用来开场监听传入的衔接恳求。Start 将对传入衔接进展排队,直至调用Stop方法或它曾经完成MaxConnections排队为止。可运用 AcceptSocket或AcceptTcpClient从传入衔接恳求队列提取衔接。这两种方法将阻止。假设要防止阻止,可首先运用Pending方法来确定队列中能否有可用的衔接恳求。Tc

50、pListener类的常用属性和方法的如表8.6和表8.7所示。7. NetworkStream类类NetworkStream类提供用于网络访问的根底数据流。类提供用于网络访问的根底数据流。NetworkStream类提供在阻类提供在阻塞方式下经过塞方式下经过Stream套接字发送和接纳数据的方法。可以在同步和异步数据传输时套接字发送和接纳数据的方法。可以在同步和异步数据传输时运用运用NetworkStream类。假设要创建类。假设要创建NetworkStream,必需提供衔接的,必需提供衔接的Socket。也可。也可指定指定NetworkStream对所提供的对所提供的Socket具有哪些具

51、有哪些FileAccess权限。以下是创建权限。以下是创建NetworkStream的几种方法。的几种方法。1为指定的为指定的Socket创建创建NetworkStream类的新实例。类的新实例。NetworkStream networkStream=new NetworkStream (Socket)2用指定的用指定的Socket 所属权为指定的所属权为指定的Socket初始化初始化NetworkStream类的新实例。类的新实例。 NetworkStream networkStream=new NetworkStream (Socket, Boolean) 3用指定的访问权限为指定的用指定

52、的访问权限为指定的Socket 创建创建NetworkStream类的新实例。类的新实例。NetworkStream networkStream=new NetworkStream (Socket, FileAccess) 4用指定的访问权限和指定的用指定的访问权限和指定的Socket所属权为指定的所属权为指定的Socket创建创建NetworkStream类的新实例。类的新实例。NetworkStream networkStream=new NetworkStream (Socket, FileAccess, Boolean) 将Write和Read方法用于简单的单线程同步阻塞I/O。假设要

53、运用不同的线程来处置I/O,那么运用BeginWrite和EndWrite方法,或BeginRead和 EndRead方法进展通讯。NetworkStream不支持对网络数据流的随机访问。CanSeek属性用于指示流能否支持查找,它的值一直为false;读取Position属性、读取Length属性或者调用 Seek方法都会引发NotSupportedException异常。NetworkStream类的常用属性和方法如表8.8和表8.9所示。【例EX8_3】 设计WinForm运用程序发送并接受文件,其中包括发送文件和接受文件两端。设计步骤:1新建发送文件端WinForm工程新建WinFor

54、m工程并命名为“EX8_3_sendfile。2添加控件并设置属性在Form1的设计视图中将此窗体调整到适当的大小并将 “Text属性设为“发送文件。从工具箱中拖放1个Button控件到窗体中,按如图8.11所示方式规划控件。button1的Text属性设置为“选择文件并发送。3添加命名空间所要添加的命名空间为:using System.Net;using System.Net.Sockets;using System.IO;4添加事件及代码双击“选择文件并发送按钮,其事件代码如下所示。5新建接受文件端WinForm工程新建WinForm工程并命名为“EX8_3_receivefile。6设置

55、属性此窗体在运转时是不可见的,Form1的Text属性设置为“接受文件。7添加命名空间所要添加的命名空间为:using System.Net;using System.Net.Sockets;using System.IO;8添加事件及代码双击Form1窗体,其事件代码如下所示。9运转程序运转此两个程序,单击发送文件端的“选择文件并发送按钮,弹出翻开文件对话框,选择要发送的文件,此时接受文件端弹出保管文件对话框,输入要保管文件的文件名和后缀名,单击“保管按钮,那么文件接受胜利。发送文件端运转的结果如图8.11所示。按【Ctrl+Alt+Del】组合键翻开Windows义务管理器,封锁接受端进程

56、,如图8.12所示。 图8.11 发送文件端 图8.12 Windows义务管理器8. UdpClient类类UdpClient类是提供用户数据报类是提供用户数据报UDP网络效力。网络效力。UdpClient类提供了一些简类提供了一些简单的方法,用于在阻塞同步方式下发送和接纳无衔接单的方法,用于在阻塞同步方式下发送和接纳无衔接UDP数据报。由于数据报。由于UDP是无是无衔接传输协议,所以不需求在发送和接纳数据前建立远程主机衔接。但可以选择衔接传输协议,所以不需求在发送和接纳数据前建立远程主机衔接。但可以选择运用下面两种方法之一来建立默许远程主机:运用下面两种方法之一来建立默许远程主机:1运用远

57、程主机名和端口号作为参数创建运用远程主机名和端口号作为参数创建UdpClient类的实例。类的实例。UdpClient udpClient=new UdpClient(hostname,port)2创建创建UdpClient类的实例,然后调用类的实例,然后调用Connect方法。方法。UdpClient udpClient=new UdpClient();/*运用下面三种方法之一建立默许远程主机运用下面三种方法之一建立默许远程主机*/udpClient.Connect (IPEndPoint) /运用指定的网络终结点建立默许远程主机运用指定的网络终结点建立默许远程主机udpClient.Con

58、nect (IPAddress, Int32) /运用指定的运用指定的IP地址和端口号建立默许远地址和端口号建立默许远程主机程主机udpClient.Connect (String, Int32) /运用指定的主机名和端口号建立运用指定的主机名和端口号建立默许远程主机默许远程主机可以运用在UdpClient中提供的任何一种发送方法将数据发送到远程设备。运用 Receive方法可以从远程主机接纳数据。UdpClient类的常用属性和方法如表8.10和表8.11所示。【例EX8_4】 设计WinForm运用程序发送广播信息并接受广播信息,其中包括效力端和接受客户端,效力端用于发送广播信息,而客户端

59、用于接纳广播信息。 设计步骤:1新建效力端WinForm工程新建WinForm工程并命名为“EX8_4_server。2添加控件并设置属性在Form1的设计视图中,将此窗体调整到适当的大小并将 “Text属性设为“效力端。从工具箱中拖放1个Button、1个Label和1个Open File Dialog组件到窗体中,按如图8.11所示进展规划控件。button1的Text属性设置为“选择文件并发送。3添加命名空间所要添加的命名空间为:using System.Net;using System.Net.Sockets;4添加事件及代码双击“开场广播按钮,其事件代码如下所示:private vo

60、id button1_Click(object sender, EventArgs e) UdpClient udpClient = new UdpClient(); try udpClient.Connect(IPAddress.Parse(55), 5000); Byte sendBytes = Encoding.ASCII.GetBytes(textBox1.Text.Trim(); udpClient.Send(sendBytes, sendBytes.Length); /发送信息 udpClient.Close(); catch (Exception ex)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论