网络编程技术第七次课.ppt
第七次课 Socket 编程(3)计算机科学与技术学院计算机科学与技术学院 网络工程教研室网络工程教研室 袁卫华袁卫华计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室Socket编程(3)一、习一、习题讲解题讲解二、基于二、基于UDPUDP的的socketsocket编程应用编程应用三、小结和作业三、小结和作业计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解1)完成一个图形界面的流式套接字聊天程序完成一个图形界面的流式套接字聊天程序1.运行界面截图运行界面截图计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解1)完成一个图形界面的流式套接字聊天程序完成一个图形界面的流式套接字聊天程序2.设计思路设计思路-ChatClientJFrame_TCP.java和和 ChatServerJFrame_TCP.javau设计界面设计界面JTextArea msg;JTextField txt_str_send;JButton sendBtn,exitBtn;计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解1)完成一个图形界面的流式套接字聊天程序完成一个图形界面的流式套接字聊天程序2.设计思路设计思路-设计界面设计界面add(msg);JPanel jp=new JPanel();jp.add(send_lbl);jp.add(txt_str_send);jp.add(sendBtn);jp.add(exitBtn);add(jp,BorderLayout.SOUTH);txt_str_send.addActionListener(this);sendBtn.addActionListener(this);exitBtn.addActionListener(this);计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解1)完成一个图形界面的流式套接字聊天程序完成一个图形界面的流式套接字聊天程序2.设计思路设计思路-ChatServerJFrame_TCP.javau设计界面设计界面u创建用于通信的套接字创建用于通信的套接字Socket对象和对象和ServerSocket对象对象u创建发送和接收消息的方法:创建发送和接收消息的方法:sendMessage()和和receiveMessage()u事件监视器代码的编写事件监视器代码的编写计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解1)完成一个图形界面的流式套接字聊天程序完成一个图形界面的流式套接字聊天程序2.设计思路设计思路-ChatServerJFrame_TCP.java构造方法构造方法1.界面设计界面设计2.创建创建ServerSocket对象对象sendMessage()方法方法1.提取文本框中的输入提取文本框中的输入2.发送给对方发送给对方receiveMessage()方法方法1.接受对方发送过来的消息并显示接受对方发送过来的消息并显示main()方法方法1.实例化一个实例化一个ChatServerJFrame_TCP类对象类对象2.调用类对象的调用类对象的receiveMessage()方法方法计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解1)完成一个图形界面的流式套接字聊天程序完成一个图形界面的流式套接字聊天程序2.设计思路设计思路-ChatServerJFrame_TCP.java构造方法构造方法1.界面设计界面设计2.创建创建ServerSocket对象对象sendMessage()方法方法1.提取文本框中的输入提取文本框中的输入2.发送给对方发送给对方receiveMessage()方法方法1.接受对方发送过来的消息并显示接受对方发送过来的消息并显示main()方法方法public void sendMessage()try String strToClient=txt_str_send.getText().trim();if(strToClient.equals()JOptionPane.showMessageDialog(null,发送内容不能为空发送内容不能为空);txt_str_send.requestFocus();return;else dout.writeUTF(strToClient);msg.setForeground(Color.red);msg.append(服务器说:服务器说:+strToClient+n);txt_str_send.setText();catch()计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解1)完成一个图形界面的流式套接字聊天程序完成一个图形界面的流式套接字聊天程序2.设计思路设计思路-ChatServerJFrame_TCP.java构造方法构造方法1.界面设计界面设计2.创建创建ServerSocket对象对象sendMessage()方法方法1.提取文本框中的输入提取文本框中的输入2.发送给对方发送给对方receiveMessage()方法方法1.接受对方发送过来的消息并显示接受对方发送过来的消息并显示main()方法方法public void receiveMessage()try while(true)/可以不断地接收对方的消息可以不断地接收对方的消息String strFromClient=din.readUTF();msg.setForeground(Color.red);msg.append(客户端说客户端说:+strFromClient+n);catch(IOException ie2)msg.append(您的聊天客户已经离开了您的聊天客户已经离开了+n);finally try din.close();dout.close();scSkt.close();catch(IOException ex)ex.printStackTrace();System.exit(0);计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解1)完成一个图形界面的流式套接字聊天程序完成一个图形界面的流式套接字聊天程序2.设计思路设计思路-ChatServerJFrame_TCP.java构造方法构造方法1.界面设计界面设计2.创建创建ServerSocket对象对象sendMessage()方法方法1.提取文本框中的输入提取文本框中的输入2.发送给对方发送给对方receiveMessage()方法方法1.接受对方发送过来的消息并显示接受对方发送过来的消息并显示main()方法方法public static void main(String args)ChatServerJFrame_TCP chatServer=new ChatServerJFrame_TCP();chatServer.receiveMessage();计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解1)完成一个图形界面的流式套接字聊天程序完成一个图形界面的流式套接字聊天程序3.问题问题-ChatServerJFrame_TCP.java和和 ChatClientJFrame_TCP.java为什么要把发送和接收信息分开来写?为什么要把发送和接收信息分开来写?sendMessage()和和receiveMessage()为什么一个用循环一个为什么一个用循环一个不用?不用?这两个方法都应该在哪里调用?这两个方法都应该在哪里调用?public void actionPerformed(ActionEvent e)if(e.getSource()=send)sendMessage();else if(e.getSource()=txt_str_sendsendMessage();计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解1)完成一个图形界面的流式套接字聊天程序完成一个图形界面的流式套接字聊天程序3.问题问题-ChatServerJFrame_TCP.java和和 ChatClientJFrame_TCP.java为什么要把发送和接收信息分开来写?为什么要把发送和接收信息分开来写?sendMessage()和和receiveMessage()为什么一个用循环一个为什么一个用循环一个不用?不用?这两个方法都应该在哪里调用?这两个方法都应该在哪里调用?public static void main(String args)ChatServerJFrame_TCP chatServer=new ChatServerJFrame_TCP();chatServer.receiveMessage();/调用接收消息方法调用接收消息方法计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解1)完成一个图形界面的流式套接字聊天程序完成一个图形界面的流式套接字聊天程序3.问题问题-ChatServerJFrame_TCP.java和和 ChatClientJFrame_TCP.java1.分析下面的异常在什么条件下产生?分析下面的异常在什么条件下产生?计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解1)完成一个图形界面的流式套接字聊天程序完成一个图形界面的流式套接字聊天程序3.问题问题-ChatServerJFrame_TCP.java和和 ChatClientJFrame_TCP.java1.分析下面的异常在什么条件下产生?分析下面的异常在什么条件下产生?发生在先启动客户端程序发生在先启动客户端程序ChatClientJFrame_TCP.java,而服务器还没有启动的情况。而服务器还没有启动的情况。因为服务器还没有启动时,还没有在某个端口监听服务,因为服务器还没有启动时,还没有在某个端口监听服务,这时候客户端企图和服务器端的这时候客户端企图和服务器端的socket相连,就会抛出这种相连,就会抛出这种异常。异常。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解1)完成一个图形界面的流式套接字聊天程序完成一个图形界面的流式套接字聊天程序3.问题问题-ChatServerJFrame_TCP.java和和 ChatClientJFrame_TCP.java1.分析下面的异常在什么条件下产生?分析下面的异常在什么条件下产生?通常服务器先启动,然后启动客户机。如果不启动客户机通常服务器先启动,然后启动客户机。如果不启动客户机程序,直接在服务器端的文本框中输入文字试图进行聊天,程序,直接在服务器端的文本框中输入文字试图进行聊天,就会抛出下列异常就会抛出下列异常java.lang.NullPointerException,为什么,为什么?分析一下原因。?分析一下原因。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解1)完成一个图形界面的流式套接字聊天程序完成一个图形界面的流式套接字聊天程序3.问题问题-ChatServerJFrame_TCP.java和和 ChatClientJFrame_TCP.java2.分析下面的异常在什么条件下产生?分析下面的异常在什么条件下产生?通常服务器先启动,然后启动客户机。如果不启动客户机通常服务器先启动,然后启动客户机。如果不启动客户机程序,直接在服务器端的文本框中输入文字试图进行聊天,程序,直接在服务器端的文本框中输入文字试图进行聊天,就会抛出下列异常就会抛出下列异常java.lang.NullPointerException,为什么,为什么?分析一下原因。?分析一下原因。没有启动客户机,服务器一直是出于阻塞状态的,没有返没有启动客户机,服务器一直是出于阻塞状态的,没有返回与客户的通信的回与客户的通信的socket对象,所以会抛出这种异常。对象,所以会抛出这种异常。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解1)完成一个图形界面的流式套接字聊天程序完成一个图形界面的流式套接字聊天程序3.问题问题-ChatServerJFrame_TCP.java和和 ChatClientJFrame_TCP.java3.分析下面的异常在什么条件下产生?分析下面的异常在什么条件下产生?这种异常发生在什么情况下?这种异常发生在什么情况下?端口已经被其他服务占用了。端口已经被其他服务占用了。如果服务器端程序连续启动了两次或者这个端口已经有其如果服务器端程序连续启动了两次或者这个端口已经有其他服务在运行了。他服务在运行了。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解1)完成一个图形界面的流式套接字聊天程序完成一个图形界面的流式套接字聊天程序3.问题问题-ChatServerJFrame_TCP.java和和 ChatClientJFrame_TCP.java如何根据如何根据ChatServerJFrame_TCP.java服务器端代码,编服务器端代码,编写客户端与之通信的代码写客户端与之通信的代码ChatClientJFrame_TCP.java?设计一个设计一个实现多线程的图形界面聊天程序。实现多线程的图形界面聊天程序。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解1)完成一个图形界面的流式套接字聊天程序完成一个图形界面的流式套接字聊天程序服务器聊天室服务器聊天室的总控制界面的总控制界面客户端聊天室客户端聊天室的总控制界面的总控制界面服务器与客户理想服务器与客户理想开启的聊天室开启的聊天室客户理想与服客户理想与服务器的聊天室务器的聊天室计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解2)基于)基于UDP的一对多的字符界面的聊天程序的一对多的字符界面的聊天程序1.ChattingRoom_UDP.java和和ChattingRoom_UDP_Client.java服务器端服务器端客户端客户端2客户端客户端1计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解2)基于)基于UDP的一对多的字符界面的聊天程序的一对多的字符界面的聊天程序1.ChattingRoom_UDP.java和和ChattingRoom_UDP_Client.javau设计思路设计思路-ChattingRoom_UDP.java建立一个建立一个DatagramSocket对象;对象;进入收发数据报包的循环,直到客户端数据传送完毕。循环进入收发数据报包的循环,直到客户端数据传送完毕。循环过程如下:过程如下:创建一个用于接收数据的创建一个用于接收数据的DatagramPakcet对象;对象;利用利用DatagramSocket类方法类方法receive()等待接收客户端的数据报包;等待接收客户端的数据报包;解析客户端数据报包内容;解析客户端数据报包内容;创建一个用于发送响应信息数据的创建一个用于发送响应信息数据的DatagramPakce对象;对象;利用利用DatagramSocket类方法类方法send()向客户端发送包含响应信息的数向客户端发送包含响应信息的数据报包;据报包;客户端数据传送完毕,释放客户端数据传送完毕,释放Socket。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解2)基于)基于UDP的一对多的字符界面的聊天程序的一对多的字符界面的聊天程序1.ChattingRoom_UDP.java和和ChattingRoom_UDP_Client.javau设计思路设计思路-ChattingRoom_UDP.java建立数据报式套接字建立数据报式套接字serverDSocket=new DatagramSocket(3333);进入聊天流程进入聊天流程构造接收数据报包,并显示接收到的数据构造接收数据报包,并显示接收到的数据packetFromClient=new DatagramPacket(bufFromClient,1024);/构造接收客户端数据的数据报包构造接收客户端数据的数据报包serverDSocket.receive(packetFromClient);/接收数据报包接收数据报包String dataFromClient=new String(bufFromClient,0,packetFromClient.getLength();System.out.println(dataFromClient);计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解2)基于)基于UDP的一对多的字符界面的聊天程序的一对多的字符界面的聊天程序1.ChattingRoom_UDP.java和和ChattingRoom_UDP_Client.javau设计思路设计思路-ChattingRoom_UDP.java进入聊天流程进入聊天流程构造发送数据报包并发送数据构造发送数据报包并发送数据String dataToClient=br.readLine().trim();/提取服务器从键盘输入的内容提取服务器从键盘输入的内容bufToClient=dataToClient.getBytes();/把服务器输入的内容存入字节数组把服务器输入的内容存入字节数组packetToClient=new DatagramPacket(bufToClient,bufToClient.length,packetFromClient.getAddress(),packetFromClient.getPort();/构造发送给客户端的数据报包构造发送给客户端的数据报包serverDSocket.send(packetToClient);/发送数据报包发送数据报包计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解2)基于)基于UDP的一对多的字符界面的聊天程序的一对多的字符界面的聊天程序1.ChattingRoom_UDP.java和和ChattingRoom_UDP_Client.javau设计思路设计思路-ChattingRoom_UDP.java进入聊天流程进入聊天流程退出聊天的设计退出聊天的设计int i=dataFromClient.indexOf(bye);if(i=6)/如果客户输入的是如果客户输入的是bye,客户结束聊天,离开了,客户结束聊天,离开了System.out.println(dataFromClient.substring(0,5)+“退出了退出了 聊天,继续其他客户聊天!聊天,继续其他客户聊天!);if(dataToClient.equalsIgnoreCase(bye)/如果服务器输入的是如果服务器输入的是bye,结束聊天。退出程序,结束聊天。退出程序System.out.println(聊天结束,退出聊天结束,退出);break;计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解2)基于)基于UDP的一对多的字符界面的聊天程序的一对多的字符界面的聊天程序1.ChattingRoom_UDP.java和和ChattingRoom_UDP_Client.javau读读ChattingRoom_UDP_Client.java,回答问题,回答问题基于基于DatagramSocket编写一对多聊天的客户端程序,需要用编写一对多聊天的客户端程序,需要用到多线程技术吗?为什么?到多线程技术吗?为什么?程序中建立数据报式套接字的端口是多少?程序中建立数据报式套接字的端口是多少?客户客户1发送给服务器端的所有的数据报包内容有没有相似之处发送给服务器端的所有的数据报包内容有没有相似之处?客户客户1从服务器那里接收到数据报包之后,如何将其中的数据从服务器那里接收到数据报包之后,如何将其中的数据不分解析出来并转换成字符串显示的?不分解析出来并转换成字符串显示的?客户端代码和服务器端代码在实现上有没有异同之处?客户端代码和服务器端代码在实现上有没有异同之处?计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解2)复习题)复习题1.UDP套接字与套接字与TCP套接字编程存在什么区别套接字编程存在什么区别u(1)UDP没有两台主机间唯一连接的概念。使用没有两台主机间唯一连接的概念。使用UDP时,时,每个数据报中都给出了完整的地址信息,因此无需要建立发每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。送方和接收方的连接。对于对于TCP协议,由于它是一个面向连接的协议,在协议,由于它是一个面向连接的协议,在Socket之间进行数据传输之前必然要建立连接,所以在之间进行数据传输之前必然要建立连接,所以在TCP中多了中多了一个连接建立的时间。一个连接建立的时间。u(2)一个)一个DatagramSocket可以从多个独立主机接收数据,可以从多个独立主机接收数据,也可向多个主机传输相同的数据,此也可向多个主机传输相同的数据,此Socket并不专用于一个并不专用于一个连接。连接。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解2)复习题)复习题1.UDP套接字与套接字与TCP套接字编程存在什么区别套接字编程存在什么区别u(3)TCP Socket将网络视为流,通过与将网络视为流,通过与Socket相关的输入相关的输入输出流来收发数据。输出流来收发数据。UDP所处理的总是单个数据报包,封装在一个数据报中的所处理的总是单个数据报包,封装在一个数据报中的数据都以一个包的形式整体收发,一个包不需与其它包相关。数据都以一个包的形式整体收发,一个包不需与其它包相关。流中的数据是有序的,而数据报包与数据报包之间是无序的。流中的数据是有序的,而数据报包与数据报包之间是无序的。u(4)使用)使用UDP传输数据时是有大小限制的,每个被传输传输数据时是有大小限制的,每个被传输的数据报必须限定在的数据报必须限定在64KB之内。之内。TCP没有这方面的限制,一旦连接建立起来,双方的没有这方面的限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大量的数据。就可以按统一的格式传输大量的数据。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解2)复习题)复习题2.观察观察TimeClient_UDP.java,如何将下图红色框线表示的,如何将下图红色框线表示的部分去掉?部分去掉?byte msg=new byte256;/存放收发数据的字节数组缓冲区存放收发数据的字节数组缓冲区packet=new DatagramPacket(msg,msg.length);/构造接收数据报包构造接收数据报包socket.receive(packet);/接收数据报包接收数据报包String time=new String(packet.getData();/解析数据报包,获取其中的数据内容解析数据报包,获取其中的数据内容System.out.println(侦听服务器:侦听服务器:+host+的当前时间是:的当前时间是:+time);字符串字符串time是一个包含了是一个包含了256字节长度字符的字符串,后字节长度字符的字符串,后面是一长串字符。面是一长串字符。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室一、习题讲解2)复习题)复习题2.观察观察TimeClient_UDP.java,如何将下图红色框线表示的,如何将下图红色框线表示的部分去掉?部分去掉?byte msg=new byte256;/存放收发数据的字节数组缓冲区存放收发数据的字节数组缓冲区packet=new DatagramPacket(msg,msg.length);/构造接收数据报包构造接收数据报包socket.receive(packet);/接收数据报包接收数据报包String time=new String(packet.getData();/解析数据报包,获取其中的数据内容解析数据报包,获取其中的数据内容time=time.trim();packet=new DatagramPacket(msg,msg.length);socket.receive(packet);/接收数据报包接收数据报包String time=new String(msg,0,packet.getLength();/解析数据报包,获取其中的数据内容解析数据报包,获取其中的数据内容计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室二、基于UDP的socket编程应用1)基于)基于UDP的一对多的图形界面的聊天程序的一对多的图形界面的聊天程序1.界面设计界面设计计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室二、基于UDP的socket编程应用1)基于)基于UDP的一对多的图形界面的聊天程序的一对多的图形界面的聊天程序2.设计流程:设计流程:ChattingRoomJFrameOne_UDP构造方法完成界面设计构造方法完成界面设计sendMessage()方法:发送消息方法:发送消息receiveMessage()方法:接收消息方法:接收消息actionPerformed()方法:事件监听器接口方法方法:事件监听器接口方法windowClosing()方法:关闭窗口操作中所做的处理方法:关闭窗口操作中所做的处理main()方法:调用类对象的方法:调用类对象的receiveMessage()方法方法计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室二、基于UDP的socket编程应用1)基于)基于UDP的一对多的图形界面的聊天程序的一对多的图形界面的聊天程序2.设计流程:设计流程:ChattingRoomJFrameOne_UDP关键数据成员关键数据成员DatagramSocket oneDgSocket;/建立收发数据报包的数据报式套接字建立收发数据报包的数据报式套接字DatagramPacket packetFromTwo,packetToTwo;/收发数据报包的两个套接字收发数据报包的两个套接字byte messageFromTwo=new byte256;/接收数据报包数据部分内容的字节数组缓冲区接收数据报包数据部分内容的字节数组缓冲区byte messageToTwo=new byte256;/发送给对方的数据发送给对方的数据boolean exitFlag=false;/退出标志退出标志String host=localhost;/对方主机名对方主机名int local_port=7777;/本地数据报式套接字端口本地数据报式套接字端口int two_port=8888;/对方数据报式套接字端口对方数据报式套接字端口计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室二、基于UDP的socket编程应用1)基于)基于UDP的一对多的图形界面的聊天程序的一对多的图形界面的聊天程序2.设计流程:设计流程:ChattingRoomJFrameOne_UDPsendMessage()方方法法str=txt_str_send.getText().trim();if(str.equals()JOptionPane.showMessageDialog(null,发送信息不能为空!发送信息不能为空!);txt_str_send.requestFocus();return;messageToTwo=str.getBytes();/将发送内容存储进字节数组将发送内容存储进字节数组packetToTwo=new DatagramPacket(messageToTwo,messageToTwo.length,InetAddress.getByName(host),two_port);/构造发送数据报包的构造发送数据报包的packetoneDgSocket.send(packetToTwo);/发送发送msg.append(甲方说:甲方说:+str+n);txt_str_send.setText();计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室二、基于UDP的socket编程应用1)基于)基于UDP的一对多的图形界面的聊天程序的一对多的图形界面的聊天程序2.设计流程:设计流程:ChattingRoomJFrameOne_UDPreceiveMessage()方法方法packetFromTwo=new DatagramPacket(messageFromTwo,messageFromTwo.length);/构造接收数据报包构造接收数据报包while(true)oneDgSocket.receive(packetFromTwo);/接收对方发送过来的数据报包接收对方发送过来的数据报包String strTmp=new String(messageFromTwo,0,packetFromTwo.getLength();/解析数据报包,提取其中的数据内容并转换为解析数据报包,提取其中的数据内容并转换为字符串字符串msg.append(乙方说:乙方说:+strTmp+n);/显示在聊天记录区显示在聊天记录区计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室二、基于UDP的socket编程应用1)基于)基于UDP的一对多的图形界面的聊天程序的一对多的图形界面的聊天程序2.设计流程:设计流程:ChattingRoomJFrameOne_UDPwindowClosing()方法方法/处理处理JFrame右上角的关闭按钮右上角的关闭按钮exitFlag=true;/设置设置exitFlag值为值为truetry sendMessage();/发送一方已经退出聊天的讯息给对方发送一方已经退出聊天的讯息给对方 catch(IOException ee)ee.printStackTrace();System.exit(0);/关闭关闭JFrame窗口窗口计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室二、基于UDP的socket编程应用1)基于)基于UDP的一对多的图形界面的聊天程序的一对多的图形界面的聊天程序2.设计流程:设计流程:ChattingRoomJFrameOne_UDPactionPerformed()方法方法if(e.getSource()=txt_str_send|e.getSource()=sendBtn)try sendMessage();catch(IOException ex)ex.printStackTrace();else if(e.getSource()=exitBtn)int i=JOptionPane.showConfirmDialog(null,确定要退确定要退出聊天吗出聊天吗?);/弹出式对话框询问是否确定退出弹出式对话框询问是否确定退出if(i=0)/确定退出确定退出exitFlag=true;/设置设置exitFlag值为值为truetry sendMessage();/发送一方已经退出聊天的讯息给对方发送一方已经退出聊天的讯息给对方 catch(IOException ee)ee.printStackTrace();System.exit(0);计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室二、基于UDP的socket编程应用1)基于)基于UDP的一对多的图形界面的聊天程序的一对多的图形界面的聊天程序2.设计流程:设计流程:ChattingRoomJFrameOne_UDPmain()方法方法public static void main(String args)throws IOException ChattingRoomJFrameOne_UDP chatServer=new ChattingRoomJFrameOne_UDP();/实例化类对象实例化类对象chatServer.receiveMessage();/调用类对象的接收消息方法调用类对象的接收消息方法u问题:问题:为什么为什么main()中只调用了中只调用了receiveMessage()方法而没有调用方法而没有调用sendMessage()方法?方法?计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室三、小结和作业1)基于)基于UDP的的Socket编程编程1.UDP Socket编程和编程和TCP Socket编程的区别编程的区别2.对基于对基于UDP Socket编程的应用案例的理解编程的应用案例的理解