网络编程 - Socket.ppt

上传人:qwe****56 文档编号:70020020 上传时间:2023-01-14 格式:PPT 页数:14 大小:53KB
返回 下载 相关 举报
网络编程 - Socket.ppt_第1页
第1页 / 共14页
网络编程 - Socket.ppt_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《网络编程 - Socket.ppt》由会员分享,可在线阅读,更多相关《网络编程 - Socket.ppt(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、网络编程-SocketC/S结构网络通讯流程o服务器开始监听o客户端申请连接o服务器接受连接(此时连接已经建立)o服务器与客户端开始通讯通讯条件o服务器IP或主机名或域名n通过IP来定位要连接的服务器所在位置n127.0.0.1表示本机IPnLocalhost表示本机o服务器监听的服务端口n通过IP找到要连接的服务器主机,但是服务器上运行着多个程序都监听着网络n而每个程序都监听着不同的端口n任何程序都必须通过端口来与网络通讯n这时,必须通过端口来定位服务器上要连接的程序通讯条件服务器 单用户opublic static void main(String args)nServerSocket s

2、erverSocket=null;nInputStream is=null;nInputStreamReader isr=null;nBufferedReader br=null;nSocket socket=null;ntry oserverSocket=new ServerSocket(6789);/开始监听osocket=serverSocket.accept();/等待接收数据ois=socket.getInputStream();/获得通向Socket的低端流oisr=new InputStreamReader(is);/高端流绑定低端流obr=new BufferedReader(

3、isr);/缓冲流绑定高端流owhile(true)/循环读取nString line=br.readLine();/接收数据nif(null=line)/如果客户端已经断开break;nnSystem.out.println(line);on catch(Exception e)e.printStackTrace();n finally otry is.close();catch(Exception e)e.printStackTrace();otry isr.close();catch(Exception e)e.printStackTrace();otry br.close();catc

4、h(Exception e)e.printStackTrace();otry socket.close();catch(Exception e)e.printStackTrace();otry serverSocket.close();catch(Exception e)e.printStackTrace();no客户端opublic static void main(String args)nSocket socket=null;nOutputStream os=null;nPrintStream ps=null;ntry osocket=new Socket(“127.0.0.1”,678

5、9);/申请连接oos=socket.getOutputStream();/获得通向Socket的低端流ops=new PrintStream(os);/高端流绑定低端流ops.println(“把犯人给我押上!”);/发送数据ops.flush();n catch(Exception e)e.printStackTrace();n finally otry ps.close();catch(Exception e)e.printStackTrace();otry os.close();catch(Exception e)e.printStackTrace();otry socket.clos

6、e();catch(Exception e)e.printStackTrace();no服务器 多用户ooserverSocket=new ServerSocket(6789);/开始监听owhile(true)/循环接收用户请求nsocket=serverSocket.accept();/等待接收数据nis=socket.getInputStream();nisr=new InputStreamReader(is);nbr=new BufferedReader(isr);nwhile(true)oString line=br.readLine();oif(null=line)nbreak;o

7、oSystem.out.println(line);nnsocket.close();oo服务器 多用户 并发o原理:n每次acept到一个Socket,都启动一个线程,把这个Socket交给这个线程进行处理n每个Socket象征着一个客户端,因为我们认为,我们将每个客户交给一个线程来处理n这种线程称为“客户线程”服务器 多用户 并发opublic class ClientThread extends Thread nprivate Socket socket=null;npublic ClientThread(Socket socket)othis.socket=socket;nnpubli

8、c void run()oInputStream is=null;oInputStreamReader isr=null;oBufferedReader br=null;otry nis=socket.getInputStream();nisr=new InputStreamReader(is);nbr=new BufferedReader(isr);nwhile(true)String line=br.readLine();if(null=line)break;System.out.println(line);no catch(Exception e)e.printStackTrace();

9、o finally ntry is.close();catch(Exception e)e.printStackTrace();ntry isr.close();catch(Exception e)e.printStackTrace();ntry br.close();catch(Exception e)e.printStackTrace();ntry socket.close();catch(Exception e)e.printStackTrace();ono服务器 多用户 并发opublic static void main(String args)nServerSocket serve

10、rSocket=null;nInputStream is=null;nInputStreamReader isr=null;nBufferedReader br=null;nSocket socket=null;ntry oserverSocket=new ServerSocket(6789);/开始监听owhile(true)nsocket=serverSocket.accept();/等待接收数据nClientThread clientThread=new ClientThread(socket);nclientThread.start();/启动一个客户线程on catch(Except

11、ion e)e.printStackTrace();n finally otry is.close();catch(Exception e)e.printStackTrace();otry isr.close();catch(Exception e)e.printStackTrace();otry br.close();catch(Exception e)e.printStackTrace();otry socket.close();catch(Exception e)e.printStackTrace();otry serverSocket.close();catch(Exception e

12、)e.printStackTrace();no客户端 多用户 并发o下面是模拟10个并发客户端的程序:opublic static void main(String args)nfor(int i=0;i 10;i+)oSocket socket=null;oOutputStream os=null;oPrintStream ps=null;otry nsocket=new Socket(127.0.0.1,6789);nos=socket.getOutputStream();nps=new PrintStream(os);nps.println(把犯人给我押上!);nps.flush();o

13、 catch(Exception e)e.printStackTrace();o finally ntry ps.close();catch(Exception e)e.printStackTrace();ntry os.close();catch(Exception e)e.printStackTrace();ntry socket.close();catch(Exception e)e.printStackTrace();ono总结o服务器:n用循环实现多客户n用多线程实现并发思索o已经可以,多用户,并发了o现在如果要求对同一个客户,都要求:n多任务n并发o怎么办?o提示:n与多用户并发一样o用循环实现多任务o用多线程实现并发

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁