《Java网络编程-实现客户端与服务端的交互.doc》由会员分享,可在线阅读,更多相关《Java网络编程-实现客户端与服务端的交互.doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateJava网络编程-实现客户端与服务端的交互Java网络编程-实现客户端与服务端的交互在Socket的程序开发中,服务器端使用ServerSocket等待客户端的链接,对于Java的网路程序来讲,每一个客户端使用一个Socket对象表示。ServerSocketServerSocket类主要用在服务器端程序的开发上,用于接收客户端的链接请求。方法类型描述1Public
2、ServerSocket(int port) throws IOException构造创建ServerSocket实例,并指定监听端口2Public Socket accept() throws IOException普通等待客户端连接,此方法连接之前一直阻塞3Public InetAddress getInetAddress()普通返回服务器的IP地址4Public boolean isClosed()普通返回ServerSocket的关闭状态5Public void close() throws IOException普通关闭ServerSocketSocket在服务器端每次运行时都要使用
3、accept()方法等待客户端连接,此方法执行之后服务器端讲进入阻塞状态,直到客户端连接之后程序才可以向下继续执行,此方法的返回值是Socket,每一个Socket都表示一个客户端对象。方法类型描述1Public Socket(String host,int port) throws UnKnownHostExcetion,IOException构造构造Socket对象,同时指定要连接服务器的主机名称及连接端口。2Public InputStream getInputStream() throws IOException普通返回此套接字的输入流3Public OutputStream getO
4、utputStream() throws IOException普通返回此套接字的输出流4Public void close() throws IOException普通关闭此Socket5Public Boolean isClosed()普通判断此套接字是否被关闭多线程:Java的多线程实现:有两种方式:1. 继承Thread类2. 实现Runnable接口继承Thread类一个类只要继承了Thread类,此类就称为多线程操作类,在Thread子类中,必须覆写run()方法,此方法为线程的主体。BufferedReader是从缓冲区之中读取内容,所有的输入的字节数据都将放在缓冲区之中。Buf
5、feredReader实例化BufferedReader buf=new BufferedReader(new InputStreamReader(System.in);InputStreamReader是R eader的子类,将输入的字节流转化为字符流。对象输出流:ObjectOutputStream方法或常量类型描述1Public ObjectOutputStream(OutputStream out) throws IOException构造传入输出的对象2Public final void writeObject(Object obj) throws IOException普通输出对象
6、对象输入流:ObjectInputStream方法或常量类型描述1Public ObjectInputStream (InputStream in) throws IOException构造构造输入对象2Public final Object readObject() throws IOException, ClassNotFoundException普通从指定位置读取对象以下代码实现了服务端与客户端的交互:里面包含了网络编程、线程、流等知识点源代码:Server.java中的代码import java.io.*;import .*;public class Server ServerSock
7、et server; / 声明ServerSocketpublic Server() try server = new ServerSocket(5566); / 构建服务,绑定端口 catch (IOException e) / TODO 自动生成 catch 块e.printStackTrace();public void startServer() /定义startServer方法,由此启动服务ServerThread st = new ServerThread(); /new出一个新线程st.start(); /启动线程public static void main(String ar
8、gs) Server s1 = new Server(); /用Server类创建一个S1对象,此为对象实例化s1.startServer();/调用startServer()方法class ServerThread extends Thread /继承Thread类public void run() while (true) try System.out.println(开始监听:);Socket formClient = server.accept();ObjectOutputStream oos = new ObjectOutputStream(formClient.getOutputS
9、tream();BufferedReader buf = new BufferedReader(new InputStreamReader(System.in);System.out.println(请输入:);String s = buf.readLine();oos.writeObject(s);ObjectInputStream ois = new ObjectInputStream(formClient.getInputStream();String sc = (String) ois.readObject();System.out.println(客户端说: + sc);Thread
10、.sleep(100); catch (IOException e) / TODO 自动生成 catch 块e.printStackTrace(); catch (ClassNotFoundException e) / TODO 自动生成 catch 块e.printStackTrace(); catch (InterruptedException e) / TODO 自动生成 catch 块e.printStackTrace();Client.java中的代码:import java.io.*;import .*;public class Client public static void
11、main(String args) while (true) try Socket toServer = new Socket(InetAddress.getLocalHost(), 5566);BufferedReader buf = new BufferedReader(new InputStreamReader(System.in);ObjectInputStream ois = new ObjectInputStream(toServer.getInputStream();String s = (String) ois.readObject();System.out.println(服
12、务器端说: + s);ObjectOutputStream oos = new ObjectOutputStream(toServer.getOutputStream();System.out.println(请输入:);String sc = buf.readLine();oos.writeObject(sc); catch (UnknownHostException e) / TODO 自动生成 catch 块e.printStackTrace(); catch (IOException e) / TODO 自动生成 catch 块e.printStackTrace(); catch (C
13、lassNotFoundException e) / TODO 自动生成 catch 块e.printStackTrace();运行说明把Server.java和Client.java两个文件放到同一个文件夹,比如放在F:网络编程 文件夹下。运行步骤:开始-运行-cmd-cd F:网络编程-F:-javac Server.java-java Server运行成功会出现以下画面:此时等待客户端连接,不要关闭此窗口再次运行- cmd-cd F:网络编程-F:-javac Client.java-java Client客户端出现:这时去看服务端窗口,会有“请输入”的提示:在里面输入内容再看客户端会出现如下窗口:这时从客户端输入内容按回车,服务端即会接受并打印出内容。功能实现!-