《3 网络编程 - Socket.ppt》由会员分享,可在线阅读,更多相关《3 网络编程 - Socket.ppt(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、网络编程-SocketC/S结构网络通讯流程服务器开始监听客户端申请连接服务器接受连接(此时连接已经建立)服务器与客户端开始通讯通讯条件服务器IP或主机名或域名通过IP来定位要连接的服务器所在位置127.0.0.1表示本机IPLocalhost表示本机服务器监听的服务端口通过IP找到要连接的服务器主机,但是服务器上运行着多个程序都监听着网络而每个程序都监听着不同的端口任何程序都必须通过端口来与网络通讯这时,必须通过端口来定位服务器上要连接的程序通讯条件服务器 单用户public static void main(String args)ServerSocket serverSocket=nul
2、l;InputStream is=null;InputStreamReader isr=null;BufferedReader br=null;Socket socket=null;try serverSocket=new ServerSocket(6789);/开始监听socket=serverSocket.accept();/等待接收数据is=socket.getInputStream();/获得通向Socket的低端流isr=new InputStreamReader(is);/高端流绑定低端流br=new BufferedReader(isr);/缓冲流绑定高端流while(true)
3、/循环读取String line=br.readLine();/接收数据if(null=line)/如果客户端已经断开break;System.out.println(line);catch(Exception e)e.printStackTrace();finally try is.close();catch(Exception e)e.printStackTrace();try isr.close();catch(Exception e)e.printStackTrace();try br.close();catch(Exception e)e.printStackTrace();try
4、socket.close();catch(Exception e)e.printStackTrace();try serverSocket.close();catch(Exception e)e.printStackTrace();客户端public static void main(String args)Socket socket=null;OutputStream os=null;PrintStream ps=null;try socket=new Socket(“127.0.0.1”,6789);/申请连接os=socket.getOutputStream();/获得通向Socket的
5、低端流ps=new PrintStream(os);/高端流绑定低端流ps.println(“把犯人给我押上!”);/发送数据ps.flush();catch(Exception e)e.printStackTrace();finally try ps.close();catch(Exception e)e.printStackTrace();try os.close();catch(Exception e)e.printStackTrace();try socket.close();catch(Exception e)e.printStackTrace();服务器 多用户serverSock
6、et=new ServerSocket(6789);/开始监听while(true)/循环接收用户请求socket=serverSocket.accept();/等待接收数据is=socket.getInputStream();isr=new InputStreamReader(is);br=new BufferedReader(isr);while(true)String line=br.readLine();if(null=line)break;System.out.println(line);socket.close();服务器 多用户 并发原理:每次acept到一个Socket,都启动
7、一个线程,把这个Socket交给这个线程进行处理每个Socket象征着一个客户端,因为我们认为,我们将每个客户交给一个线程来处理这种线程称为“客户线程”服务器 多用户 并发public class ClientThread extends Thread private Socket socket=null;public ClientThread(Socket socket)this.socket=socket;public void run()InputStream is=null;InputStreamReader isr=null;BufferedReader br=null;try is
8、=socket.getInputStream();isr=new InputStreamReader(is);br=new BufferedReader(isr);while(true)String line=br.readLine();if(null=line)break;System.out.println(line);catch(Exception e)e.printStackTrace();finally try is.close();catch(Exception e)e.printStackTrace();try isr.close();catch(Exception e)e.pr
9、intStackTrace();try br.close();catch(Exception e)e.printStackTrace();try socket.close();catch(Exception e)e.printStackTrace();服务器 多用户 并发public static void main(String args)ServerSocket serverSocket=null;InputStream is=null;InputStreamReader isr=null;BufferedReader br=null;Socket socket=null;try serv
10、erSocket=new ServerSocket(6789);/开始监听while(true)socket=serverSocket.accept();/等待接收数据ClientThread clientThread=new ClientThread(socket);clientThread.start();/启动一个客户线程 catch(Exception e)e.printStackTrace();finally try is.close();catch(Exception e)e.printStackTrace();try isr.close();catch(Exception e)e
11、.printStackTrace();try br.close();catch(Exception e)e.printStackTrace();try socket.close();catch(Exception e)e.printStackTrace();try serverSocket.close();catch(Exception e)e.printStackTrace();客户端 多用户 并发下面是模拟10个并发客户端的程序:public static void main(String args)for(int i=0;i 10;i+)Socket socket=null;Output
12、Stream os=null;PrintStream ps=null;try socket=new Socket(127.0.0.1,6789);os=socket.getOutputStream();ps=new PrintStream(os);ps.println(把犯人给我押上!);ps.flush();catch(Exception e)e.printStackTrace();finally try ps.close();catch(Exception e)e.printStackTrace();try os.close();catch(Exception e)e.printStackTrace();try socket.close();catch(Exception e)e.printStackTrace();总结服务器:用循环实现多客户用多线程实现并发思索已经可以,多用户,并发了现在如果要求对同一个客户,都要求:多任务并发怎么办?提示:与多用户并发一样用循环实现多任务用多线程实现并发