Socket通信程序设计.ppt

上传人:za****8 文档编号:6314741 上传时间:2020-02-22 格式:PPT 页数:36 大小:989.02KB
返回 下载 相关 举报
Socket通信程序设计.ppt_第1页
第1页 / 共36页
Socket通信程序设计.ppt_第2页
第2页 / 共36页
Socket通信程序设计.ppt_第3页
第3页 / 共36页
点击查看更多>>
资源描述
2Socket通信程序设计 文志强zhqwen20001 计算机与通信学院 基本内容 2 1Socket通信原理2 2Socket网络编程2 3项目实战 2 1Socket通信原理 IP地址 主机标识端口 服务类型 Socket IP address Port server 套接字通讯首先强调发送方和接收方的区别 同时也明确服务器和客户机之间的不同一个客户机必须知道服务器的地址和端口 以便进行申请连接一个服务器从它接收到的数据报文中读取客户端的地址和端口套接字通过 确定服务器和客户机的地址和端口以及协议 利用java io实现数据的传输 Socket程序基本机理 Java Internet语言具备强大网络通信功能 基于套接字 Socket 通信方式 流套接字 TCP协议 TransmissionControlProtocol UDP协议 UserDatagramProtocol 数据报套接字 Java的Socket属于流式套接字通信 采用TCP协议 提供面向连接的服务 实现可靠的通信 JavaSocket J提供两个类 实现Socke通信 Socket编程属低层次网络编程 功能强大 相对URL网络编程提供更多的功能和更灵活的控制 复杂度较高 ServerSocket 服务器端Socket 客户端通 操作TCP套接字的发送和接收需要借助java io包的InputStream OutputStream完成 分别通过方法实现 Socket getInputStream Socket getOutputStream Socket ServerSocket构造函数 Socket 通过系统默认类型的SocketImpl创建未连接套接字Socket InetAddressaddress intport 创建一个流套接字并将其连接到指定IP地址的指定端口号Socket InetAddressaddress intport InetAddresslocalAddr intlocalPort 创建一个套接字并将其连接到指定远程端口上的指定远程地址Socket Stringhost intport 创建一个流套接字并将其连接到指定主机上的指定端口号Socket Stringhost intport InetAddresslocalAddr intlocalPort 创建一个套接字并将其连接到指定远程主机上的指定远程端口 ServerSocket 创建非绑定服务器套接字ServerSocket intport 创建绑定到特定端口的服务器套接字ServerSocket intport intbacklog 利用指定的backlog创建服务器套接字并将其绑定到指定的本地端口号ServerSocket intport intbacklog InetAddressbindAddr 使用指定的端口 侦听backlog和要绑定到的本地IP地址创建服务器 Socket ServerSocket主要方法 JavaSocket通信原理 通讯的两个程序分别为Client Server Client端程序申请连接 Server端程序监听所有端口 判断是否有Client程序的服务请求 当Client程序请求某端口连接时 Server程序将 套接字 连接到该端口上 此时 Client Server程序建立一个虚连接 Client程序向套接字写入请求 Server程序处理请求并把处理结果通过套接字送回给Client 通信结束时 拆除所建的虚拟连接 Socket网络通信程序由三个基本部分组成 1 建立连接 通信双方在通信开始之前 建立一条专用的虚拟连接通道 2 数据通信 利用虚拟连接通道传送数据信息进行通信 3 拆除连接 通信结束时 将所建的虚拟连接拆除 2 2Socket网络编程 Server端 Client端 service ServiceSocket port number 创建service对象 以TCP服务实现端口监听socket ServerSocket accept 创建socke对象 接收用户访问请求 Socket Socket port number 创建socke对象 建立连接 发送访问请求 InputStreamSocket对象输入流OutputStreamSocket对象输出流通过socke对象实现与Client端数据传输 OutputStreamSocket对象输出流InputStreamSocket对象输入流通过socke对象 实现与Servert端数据传输 socket close 关闭Socke关闭结束与Client端的连接service close 关闭监听程序 socket close 关闭Socke结束与Server端的连接 1 建立连接 2 数据通讯 3 拆除连接 Socke通信机制 OutputStream获得Socket对象输出流 Socke通信机制 建 立 S o c k e t 连 接 通过流传输数据 服务端 联结成功获得已连接的Socket对象 Socket host port 创建Socket对象向指定主机端口发出连接请求 客户端 Socket对象 ServerSocket对象 InputStream获得Socket对象输入流 申 请 连 接 ServiceSocket close 停止提供TCP连接服务 一个ServerSocket对象和一个Socket对象 一个Socket对象 Socket close 关闭TCP连接 ServiceSocket port 创建ServiceSocke对象 提供TCP连接服务 accept 在指定的端口监听客户端请求联结创建 InputStream获得Socket对象输入流 Socket close 关闭TCP连接 OutputStream获得Socket对象输出流 ServerSocket对象 访问监听 利用构造函数创建ServerSocke Socket两个对象 建立双向连接引入异常处理机制建立I O流实现读 写数据流释放连接 ServerSocket程序基本框架结构 JavaServerSocket Socket创建一个服务器的典型工作流程 1 创建一个指定端口的ServerSocket对象 2 ServerSocket对象调用accept 方法创建一个Socket对象 实现端口监听连接请求 但accept 收到客户端连接请求 且返回连接客户端与服务器的Socket对象 则双方的虚电路建立完成 3 调用getInputStream 方法和getOutputStream 方法获得Socket对象的输入流和输出流 4 服务器与客户端根据协议交互数据 5 直至一端请求关闭连接 服务器和客户端连接终止 6 服务器回到第2步 继续监听下一次的连接 而客户端则运行结束 importjava io publicclassTcpServer staticpublicvoidmain Stringargs try ServerSocketsvrsoc newServerSocket 8000 Sockesoc svrsoc accept InputStreamis soc getInputStream Socket输入流DataInputStreamin newDataInputStream is OutputStreamos soc getOutputStream Socket输出流PrintStreamout newPrintStream os 服务器创建输入流对象in和输出流对象out 接收客户输入信息 in 和向客户发送信息 out 同样 客户端也建立两个对象 与服务器双向通信 服务器向输出流信息都成为客户输入信息 而客户输出的信息送入服务者的输入流 InetAddressclientIP soc getInetAddress System out println Client sIPaddress clientIP intport soc getPort 得到客户方的端口System out println Client sport port out println Welcome Stringstr in readLine 在输入流对象in中读一行while str equals quit System out println 客户端 str str in readLine System out println 客户关机 catch Exceptione System out println Error e finally is close 关闭输入流os close 关闭输出流soc close 关闭socket 拆除链路svrsoc close 关闭监听 停止服务 1 创建指定端口的ServerSocket对象 2 调用accept 方法监听端口连接请求 3 1 Socket绑定客户IP地址和端口3 2 调用getInputStream 或getOutputStream 方法获得Socket对象的输入流和输出流 4 服务器与客户端连接根据协议交互数据 5 请求关闭连接 服务器和客户端连接终止 6 停止该用户TCP连接服务 服务器套接字程序 JavaSocket Socket创建一个客户端的典型工作流程 1 创建一个指定地址和端口的Socket对象 建立服务器与客户端连接 2 调用getInputStream 方法或getOutputStream 方法获得Socket对象的输入流和输出流 3 服务器与客户端连接根据协议交互数据 4 请求关闭连接 服务器和客户端连接终止 importjava io publicclassTcpClient staticpublicvoidmain Stringargs try Socketsoc newSocket localhost 8000 System out println ConnectingtotheServer InputStreamis soc getInputStream OutputStreamos soc getOutputStream DataInputStreamin newDataInputStream is PrintStreamout newPrintStream os Stringstrin in readLine System out println 服务器端 strin bytebmsg newbyte 20 System in read bmsg Stringmsg newString bmsg 0 msg msg trim while msg equals quit 从键盘循环读入 直到输入 quit 为止out println msg System in read bmsg msg newString bmsg 0 msg msg trim out println msg catch Exceptione System out println Error e finally is close 关闭输入流os close 关闭输出流soc close 关闭socket 拆除链路System exit 0 1 创建指定地址和端口的Socket对象建立服务器与客户端连接 2 调用getInputStream 或getOutputStream 方法获得Socket对象的输入流和输出流 3 服务器与客户端连接根据协议交互数据 4 关闭请求连接 服务器和客户端连接终止 客户机套接字程序 Socke通信编程 异常处理 ServerSocket和socket编程需要进行try catch异常处理 1 服务器端 ServerSocketserver Socketsocket try server newServerSocket port socket server accept catch Exceptione System out println Erroroccurred e 2 客户端 Socketsocket try socket newSocket ServerName port catch Exceptione System out println Erroroccurred e 建立Socket连接后 利用方法getOutputStream 和getInputStream 建立向Socket读写数据的I O流 需要进行try catch异常处理 try InputStreamins socket getInputStream OutputStreamouts socket getOutputStream catch Exceptione System out println Erroroccurred e Socke通信编程 建立 输出流 获取Socket的输入 输出流后 需要对两个流对象建立数据流的读 写操作InputStreamins socket getInputStream OutputStreamouts socket getOutputStream 或PrintStreamout newPrintStream outs 读入一个字符串并将其长度写入输出流中 则用 Stringstr inn readLine out println str length Socke通信编程 读写数据流 无论是服务器程序还是客户端程序 通信结束时 必须断开连接并释放所占用的资源 Java断开连接方法 close 1 关闭输入输出流 停止数据传输 2 关闭socket 终止申请服务 3 关闭serversocket 关闭监听服务 Socke通信编程 释放连接 问题 Socket设计输入流和输出流的处理 客户机与服务器进行数据读取时将引起堵塞 解决办法 服务器一旦接受到用户的Socket 将专门为该用户建立在一个独立的线程 进行数据的访问交换操作 2 服务器端程序importjava io importjava util publicclassServer publicstaticvoidmain Stringargs ServerSocketserver null ServerThreadthread Socketyou null while true try server newServerSocket 4331 catch IOExceptione1 System out println 正在监听 ServerSocket对象不能重复创建 try you server accept System out println 客户的地址 you getInetAddress catch IOExceptione System out println 正在等待客户 if you null newServerThread you start 为每个客户启动一个专门的线程 else continue classServerThreadextendsThread Socketsocket DataOutputStreamout null DataInputStreamin null Strings null ServerThread Sockett socket t try in newDataInputStream socket getInputStream out newDataOutputStream socket getOutputStream catch IOExceptione publicvoidrun while true doublea 0 b 0 c 0 root1 0 root2 0 try a in readDouble 堵塞状态 除非读取到信息 b in readDouble c in readDouble doubledisk b b 4 a c root1 b Math sqrt disk 2 a root2 b Math sqrt disk 2 a out writeDouble root1 out writeDouble root2 catch IOExceptione System out println 客户离开 break 1 客户端程序 importjava io importjava awt importjava awt event importjavax swing classClientextendsJFrameimplementsRunnable ActionListener JButtonconnection computer JTextFieldinputA inputB inputC JTextAreashowResult Socketsocket null DataInputStreamin null DataOutputStreamout null Threadthread publicClient socket newSocket 待连接的套接字 connection newJButton 连接服务器 computer newJButton 求方程的根 computer setEnabled false 没有和服务器连接之前 该按钮不可用 inputA newJTextField 0 12 inputB newJTextField 0 12 inputC newJTextField 0 12 BoxboxV1 Box createVerticalBox boxV1 add newJLabel 输入2次项系数 boxV1 add newJLabel 输入1次项系数 boxV1 add newJLabel 输入常数项 BoxboxV2 Box createVerticalBox boxV2 add inputA boxV2 add inputB boxV2 add inputC BoxbaseBox Box createHorizontalBox baseBox add boxV1 baseBox add boxV2 Containercon getContentPane con setLayout newFlowLayout showResult newJTextArea 8 18 con add connection con add baseBox con add computer con add newJScrollPane showResult computer addActionListener this connection addActionListener this thread newThread this setBounds 100 100 360 310 setVisible true setDefaultCloseOperation JFrame EXIT ON CLOSE publicvoidrun while true try doubleroot1 in readDouble 堵塞状态 除非读取到信息 doubleroot2 in readDouble showResult append n两个根 n root1 n root2 showResult setCaretPosition showResult getText length catch IOExceptione showResult setText 与服务器已断开 computer setEnabled false break publicvoidactionPerformed ActionEvente if e getSource connection try 请求和服务器建立套接字连接if socket isConnected else InetAddressaddress InetAddress getByName 127 0 0 1 InetSocketAddresssocketAddress newInetSocketAddress address 4331 socket connect socketAddress in newDataInputStream socket getInputStream out newDataOutputStream socket getOutputStream computer setEnabled true thread start catch IOExceptionee if e getSource computer try doublea Double parseDouble inputA getText b Double parseDouble inputB getText c Double parseDouble inputC getText doubledisk b b 4 a c if disk 0 out writeDouble a out writeDouble b out writeDouble c else inputA setText 此2次方程无实根 catch Exceptionee inputA setText 请输入数字字符 publicstaticvoidmain Stringargs Clientwin newClient 2 3项目实战 聊天室系统的设计与实现 1 系统整体框架 C S模式 2 模块设计 客户端 登陆 修改用户名 发送聊天信息 接收并显示聊天信息 修改服务器地址 服务器端 启动服务器 发送系统消息 发送聊天信息 接收并显示或转发聊天信息 端口设置 图1客户端模块设计 图2服务器端模块设计 注册 3 传送消息的种类及格式设计 注册信息0登陆信息1聊天信息2系统信息3退出信息4 界面示意图 1 类JComboBox将按钮或可编辑字段与下拉列表组合的组件 用户可以从下拉列表中选择值 下拉列表在用户请求时显示 如果使组合框处于可编辑状态 则组合框将包括用户可在其中键入值的可编辑字段 JComboBox Object items 创建包含指定数组中的元素的JComboBox 4 所需要的知识 2 类ObjectInputStream和ObjectOutputStream可以读取 输出 重构 对象 通过使用流中的文件可以实现对象的持久存储 如果流是网络套接字流 则可以在另一台主机上或另一个进程中重构对象 protectedObjectOutputStream 为完全重新实现ObjectOutputStream的子类提供一种方法 让它不必分配仅由ObjectOutputStream的实现使用的私有数据 ObjectOutputStream OutputStreamout 创建写入指定OutputStream的ObjectOutputStream 3 类JDialog创建对话框窗口的主要类 可以使用此类创建自定义的对话框 或者调用JOptionPane中的多个类方法来创建各种标准对话框 4 线程的创建1 通过扩展Thread类2 实现Runnable接口5 结构体的设计publicclassNode Stringusername null Socketsocket null ObjectOutputStreamout null ObjectInputStreamin null Theend 聊天室系统的设计与实现聊天界面设计客户端发送聊天消息 服务器端接受聊天消息服务器端发送聊天消息 客户端接受聊天消息合法性判断启动服务 停止服务 退出连接设置多个客户端之间通信数据库设计 注册及登陆 计算机应用技术课程实习 实习手册书写要求 时间 2011 1 4 1 15 共10次日志和2篇周记 1篇实习报告第一周 4 5 6 7 8第二周 10 11 12 13 14上交形式 纸质版和电子版
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!