知识大全 三步学会Java Socket编程
Posted 知
篇首语:志不强者智不达,言不信者行不果。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 三步学会Java Socket编程相关的知识,希望对你有一定的参考价值。
三步学会Java Socket编程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
第一步 充分理解Socket 什么是socket 所谓socket通常也称作 套接字 用于描述IP地址和端口 是一个通信链的句柄 应用程序通常通过 套接字 向网络发出请求或者应答网络请求 以J SDK 为例 Socket和ServerSocket类库位于包中 ServerSocket用于服务器端 Socket是建立网络连接时使用的 在连接成功时 应用程序两端都会产生一个Socket实例 操作这个实例 完成所需的会话 对于一个网络连接来说 套接字是平等的 并没有差别 不因为在服务器端或在客户端而产生不同级别 不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的 重要的Socket API Socket继承于java lang Object 有八个构造器 其方法并不多 下面介绍使用最频繁的三个方法 其它方法大家可以见JDK 文档 Accept方法用于产生 阻塞 直到接受到一个连接 并且返回一个客户端的Socket对象实例 阻塞 是一个术语 它使程序运行暂时 停留 在这个地方 直到一个会话产生 然后程序继续 通常 阻塞 是由循环产生的 getInputStream方法获得网络连接输入 同时返回一个IutputStream对象实例 getOutputStream方法连接的另一端将得到输入 同时返回一个OutputStream对象实例 注意 其中getInputStream和getOutputStream方法均会产生一个IOException 它必须被捕获 因为它们返回的流对象 通常都会被另一个流对象使用 如何开发一个Server Client模型的程序 开发原理 服务器 使用ServerSocket监听指定的端口 端口可以随意指定(由于 以下的端口通常属于保留端口 在一些操作系统中不可以随意使用 所以建议使用大于 的端口) 等待客户连接请求 客户连接后 会话产生 在完成会话后 关闭连接 客户端 使用Socket对网络上某一个服务器的某一个端口发出连接请求 一旦连接成功 打开会话 会话完成后 关闭Socket 客户端不需要指定打开的端口 通常临时的 动态的分配一个 以上的端口 {建立服务器} import *; import java io *; public class Server private ServerSocket ss; private Socket socket; private BufferedReader in; private PrintWriter out; public Server() try ss = new ServerSocket( ); while (true) socket = ss accept(); in = new BufferedReader(new InputStreamReader(socket getInputStream())); out = new PrintWriter(socket getOutputStream() true); String line = in readLine(); out println( you input is : + line); out close(); in close(); socket close(); ss close(); catch (IOException e) public static void main(String[] args) new Server(); 这个程序建立了一个服务器 它一直监听 端口 等待用户连接 在建立连接后给客户端返回一段信息 然后结束会话 这个程序一次只能接受一个客户连接 {建立客户端} import java io *; import *; public class Client Socket socket; BufferedReader in; PrintWriter out; public Client() try socket = new Socket( xxx xxx xxx xxx ); in = new BufferedReader(new InputStreamReader(socket getInputStream())); out = new PrintWriter(socket getOutputStream() true); BufferedReader line = new BufferedReader(new InputStreamReader(System in)); out println(line readLine()); line close(); out close(); in close(); socket close(); catch (IOException e) public static void main(String[] args) new Client(); 这个客户端连接到地址为xxx xxx xxx xxx的服务器 端口为 并从键盘输入一行信息 发送到服务器 然后接受服务器的返回信息 最后结束会话 第二步 多个客户同时连接 在实际的网络环境里 同一时间只对一个用户服务是不可行的 一个优秀的网络服务程序除了能处理用户的输入信息 还必须能够同时响应多个客户端的连接请求 在java中 实现以上功能特点是非常容易的 设计原理 主程序监听一端口 等待客户接入 同时构造一个线程类 准备接管会话 当一个Socket会话产生后 将这个会话交给线程处理 然后主程序继续监听 运用Thread类或Runnable接口来实现是不错的办法 {实现消息共享} import java io *; import *; public class Server extends ServerSocket private static final int SERVER_PORT = ; public Server() throws IOException super(SERVER_PORT); try while (true) Socket socket = accept(); new CreateServerThread(socket); catch (IOException e) finally close(); // CreateServerThread class CreateServerThread extends Thread private Socket client; private BufferedReader in; private PrintWriter out; public CreateServerThread(Socket s) throws IOException client = s; in = new BufferedReader(new InputStreamReader(client getInputStream() GB )); out = new PrintWriter(client getOutputStream() true); out println( Wele ); start(); public void run() try String line = in readLine(); while (!line equals( bye )) String msg = createMessage(line); out println(msg); line = in readLine(); out println( See you bye! ); client close(); catch (IOException e) private String createMessage(String line) xxxxxxxxx; public static void main(String[] args) throws IOException new Server(); 这个程序监听 端口 并将接入交给CreateServerThread线程运行 CreateServerThread线程接受输入 并将输入回应客户 直到客户输入 bye 线程结束 我们可以在createMessage方法中 对输入进行处理 并产生结果 然后把结果返回给客户 第三步 实现信息共享:在Socket上的实时交流 网络的伟大之一也是信息共享 Server可以主动向所有Client广播消息 同时Client也可以向其它Client发布消息 下面看看如何开发一个可以实时传递消息的程序 设计原理 服务器端接受客户端的连接请求 同时启动一个线程处理这个连接 线程不停的读取客户端输入 然后把输入加入队列中 等候处理 在线程启动的同时将线程加入队列中 以便在需要的时候定位和取出 {源码} import java io *; import *; import java util *; import java lang *; public class Server extends ServerSocket private static ArrayList User_List = new ArrayList(); private static ArrayList Threader = new ArrayList(); private static LinkedList Message_Array = new LinkedList(); private static int Thread_Counter = ; private static boolean isClear = true; protected static final int SERVER_PORT = ; protected FileOutputStream LOG_FILE = new FileOutputStream( d:/connect log true); public Server() throws FileNotFoundException IOException super(SERVER_PORT); new Broadcast(); //append connection log Calendar now = Calendar getInstance(); String str = [ + now getTime() toString() + ] Accepted a connection\\ \\ ; byte[] tmp = str getBytes(); LOG_FILE write(tmp); try while (true) Socket socket = accept(); new CreateServerThread(socket); finally close(); public static void main(String[] args) throws IOException new Server(); // Broadcast class Broadcast extends Thread public Broadcast() start(); public void run() while (true) if (!isClear) String tmp = (String)Message_Array getFirst(); for (int i = ; i < Threader.size(); i++) CreateServerThread client = (CreateServerThread)Threader.get(i); cha138/Article/program/Java/hx/201311/25633相关参考
知识大全 Java网络编程-Java Socket编程(一)
Java网络编程-JavaSocket编程(一) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 Java网络编程-Java Socket编程(二)
Java网络编程-JavaSocket编程(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 Java网络编程-Java Socket编程(四)
Java网络编程-JavaSocket编程(四) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 Java网络编程-Java Socket编程(三)
Java网络编程-JavaSocket编程(三) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!li
Java中的Socket编程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Socket是网络上
知识大全 Java Socket编程(一)Socket传输模式
JavaSocket编程(一)Socket传输模式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java进行并发多连接socket编程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java多
Javasocket入门编程实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 例子是学习编程的
JavaSocket编程UDP 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 看了下UDP编程的
利用Socket进行Java网络编程(三) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 作者郗