




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Socket 说 明 文 档 Socket 连接过程 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服 务器监听,客户端请求,连接确认。 服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监 控网络状态。 客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客 户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向 服务器端套接字提出连接请求。 连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端 套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连 接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。 Java 开发一个 Server-Client 模型的程序 开发原理 服务器,使用 ServerSocket 监听指定的端口,端口可以随意指定(由于 1024 以下的端口通常属于 保留端口,在一些操作系统中不可以随意使用,所以建议使用大于 1024 的端口),等待客户连接请求,客 户连接后,会话产生;在完成会话后,关闭连接。 客户端,使用 Socket 对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会 话;会话完成后,关闭 Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个 1024 以上 的端口。 Socket 接口是 TCP/IP 网络的 API,Socket 接口定义了许多函数或例程,程序员可以用它们来开发 TCP/IP 网络上的应用程序。要学 Internet 上的 TCP/IP 网络编程,必须理解 Socket 接口。Socket 接口设计 者最先是将接口放在 Unix 操作系统里面的。如果了解 Unix 系统的输入和输出的话,就很容易了解 Socket 了。网络的 Socket 数据传输是一种特殊的 I/O,Socket 也是一种文件描述符。 Socket 也具有一个类似于打 开文件的函数调用 Socket(),该函数返回一个整型的 Socket 描述符,随后的连接建立、数据传输等操作都 是通过该 Socket 实现的。 DEMO 程序实现功能 服务端监听 60000 端口,客户端发送信息 A,服务端返回信息 A,直到客户端发送 exit 时,服务端 断开此次连接。 目录结构及说明 Server 端程序 SocketServer.java import java.io.IOException; import .ServerSocket; import .Socket; import java.util.Properties; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import com.upower.base.PropertyLoader; public class SocketServer private static Properties socketProp = null; private static int port = 60000;/端口号 private static int POOL_SIZE = 10;/ CPU线程池大小 private ServerSocket serverSocket; private ExecutorService servicePool; / 线程池 public static void main(String args) /loadProp();读取配置文件,不读取使用默认设置。 new SocketServer().service(); public static void loadProp() socketProp = PropertyLoader.loadProperties(“perties“); if (socketProp != null) port = Integer.valueOf(socketProp .getProperty(“SocketPort“, “60000“); POOL_SIZE = Integer.valueOf(socketProp.getProperty(“POOL_SIZE“, “10“); public SocketServer() try this.serverSocket = new ServerSocket(port); this.servicePool = Executors.newFixedThreadPool(POOL_SIZE); catch (IOException e) e.printStackTrace(); System.out.print(e.getMessage(); public void service() System.out.println(“socket服务启动成功!“); while (true) try Socket socket = this.serverSocket.accept(); this.servicePool.execute(new ServerHandler(socket); catch (IOException e) e.printStackTrace(); this.servicePool.shutdown(); ServerHandler.java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import .Socket; public class ServerHandler implements Runnable private Socket socket; public ServerHandler(Socket socket) this.socket = socket; private PrintWriter getWriter(Socket socket) throws IOException OutputStream socketOut = socket.getOutputStream(); return new PrintWriter(socketOut, true); private BufferedReader getReader(Socket socket) throws IOException InputStream socketIn = socket.getInputStream(); return new BufferedReader(new InputStreamReader(socketIn); public void run() try System.out.println(“New connection accepted “ + socket.getInetAddress() + “:“ + socket.getPort(); BufferedReader br = getReader(socket); PrintWriter pw = getWriter(socket); String msg = null; /读取客户端发送信息并回传信息! while (msg = br.readLine() != null) System.out.println(“input:“ + msg); if (msg.equals(“exit“) break; pw.println(“output:“ + msg); pw.close(); br.close(); catch (IOException e) e.printStackTrace(); System.out.print(“server error!“ ); finally try /关闭socket if (socket != null) socket.close(); catch (IOException e) e.printStackTrace(); Client 端程序 SocketClient.java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import .Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class SocketClient public static void main(String args) / 创建一个线程池 ExecutorService exec = Executors.newCachedThreadPool(); exec.execute(createTask(1); private static Runnable createTask(final int taskID) return new Runnable() private Socket socket = null; private int port = 60000; private PrintWriter getWriter(Socket socket) throws IOException OutputStream socketOut = socket.getOutputStream(); return new PrintWriter(socketOut, true); private BufferedReader getReader(Socket socket) throws IOException InputStream socketIn = socket.getInputStream(); return new BufferedReader(new InputStreamReader(socketIn); public void run() System.out.println(“client start!“); try / socket连接 socket = new Socket(“localhost“, port); BufferedReader br = getReader(socket); PrintWriter pw = getWriter(socket); String msg = null; System.out.print(“input:“); BufferedReader reader = new BufferedReader( new InputStreamReader(System.in); msg = reader.readLine();/ 从控制台获取输入文本 while (true) pw.println(msg); if (msg.equ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025南昌市西湖区疾病预防控制中心招聘工作人员1人模拟试卷及答案详解(各地真题)
- 2025第五师医院招聘劳务派遣人员(2人)模拟试卷附答案详解(典型题)
- 2025河南省职工医院普外科招聘2人考前自测高频考点模拟试题及答案详解(必刷)
- 2025内蒙古赤峰龙韵城市建设有限公司所属子公司员工招聘进入人员及相关考前自测高频考点模拟试题附答案详解
- 2025广西贵港市公安局覃塘分局招聘警务辅助人员80人考前自测高频考点模拟试题附答案详解
- 2025南华大学附属南华医院招聘62人(湖南)考前自测高频考点模拟试题附答案详解(完整版)
- 2025河南开封教投教育集团招聘116人考前自测高频考点模拟试题带答案详解
- 2025河北邯郸市丛台区选聘农村党务(村务)工作者42人模拟试卷附答案详解(考试直接用)
- 2025店铺租赁合同范本版
- 2025广西桂林医科大学第一附属医院公开选拔超声医学科主任1人考前自测高频考点模拟试题及答案详解(名师系列)
- 《道路勘测设计》课件-第三章 平面设计
- 学堂在线 英文科技论文写作与学术报告 期末考试答案
- 护理安全警示教育案例
- 车辆损坏和解协议书
- 品控管理制度大全
- 洗衣房院感知识培训课件
- XX附属学校职称评聘及岗位聘任实施办法(完整版)
- DBJ51-T 040-2021 四川省工程建设项目招标代理操作规程
- 创新方法大赛理论知识考核试题题库及答案
- 电机车点检表及点检标准
- 高一英语必修一单词表默写版
评论
0/150
提交评论