java中socket编程
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于java中socket编程内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在java中socket编程相关知识领域提供全面立体的资料补充。同时还包含 j2ee是什么、jar格式、java 的知识内容,欢迎查阅!
java中socket编程相关知识
-
Java Socket 编程原理及教程原文链接:http://www.codeceo.com/article/java-socket.html对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket。服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了。首先ServerSocket将在服务端监听某个端口,当发现客户端有Socket来试图连接它时,它会accept该Socket的连接请求,同时在服务端建立一个对应的Socket与之进行通信。这样就有两个Socket了,客户端和服务端各一个。对于Socket之间的通信其实很简单,服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。下面来看一些服务端与客户端通信的例子:1、客户端写服务端读服务端代码public class 
-
Java Socket 编程原理及教程原文链接:http://www.codeceo.com/article/java-socket.html对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket。服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了。首先ServerSocket将在服务端监听某个端口,当发现客户端有Socket来试图连接它时,它会accept该Socket的连接请求,同时在服务端建立一个对应的Socket与之进行通信。这样就有两个Socket了,客户端和服务端各一个。对于Socket之间的通信其实很简单,服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。下面来看一些服务端与客户端通信的例子:1、客户端写服务端读服务端代码public class 
-
读懂Java中的Socket编程1 Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一。如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的。本文会介绍一下基于TCP/IP的Socket编程,并且如何写一个客户端/服务器程序。 2 Unix的输入输出(IO)系统遵循Open-Read-Write-Close这样的操作范本。当一个用户进程进行IO操作之前,它需要调用Open来指定并获取待操作文件或设备读取或写入的权限。一旦IO操作对象被打开,那么这个用户进程可以对这个对象进行一次或多次的读取或写入操作。
-
Java Socket 编程原理及教程原文链接对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket。服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了。首先ServerSocket将在服务端监听某个端口,当发现客户端有Socket来试图连接它时,它会accept该Socket的连接请求,同时在服务端建立一个对应的Socket与之进行通信。这样就有两个Socket了,客户端和服务端各一个。对于Socket之间的通信其实很简单,服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。下面来看一些服务端与客户端通信的例子:1、客户端写服务端读服务端代码public class Server { pu
java中socket编程相关课程
java中socket编程相关教程
- 3. Java 非阻塞式 Socket 编程 介绍 Java 非阻塞式 Socket 编程,就得介绍 Java NIO。Java NIO 是 Java New IO API,有时也解释为 Java Non-blocking IO。通过 Java NIO 可以实现 Java 非阻塞 Socket 编程。Java NIO 是 Java 1.4 支持的,它将 Socket 数据流抽象为一个 Channel(管道),Socket 数据读写是通过 Channel实现的,并且提供了 Buffer 机制,提高数据读写的性能。Java NIO 通常用来编写高性能 Java 服务器程序。在 Java 1.7 以后,Java NIO 对磁盘文件处理得到了增强,可以将 Socket I/O 和 文件 I/O 融合在 Java NIO 中。Java NIO 提供的新的类结构如下:类名称功能说明ServerSocketChannel表示服务端 TCP Socket 的监听 Channel。ServerSocketChannel 提供的工厂方法 open,用于创建它的实例;同时它提供了 accept 方法用于在服务器中接收新的客户端连接请求,返回值是 SocketChannel 类的实例。SocketChannelSocketChannel 表示一个 TCP 通信 Channel,可以通过它的 open 方法创建,也可以通过 ServerSocketChannel 的 accept 方法创建。SelectorJava I/O 事件多路复用机制,用于同时监听多个 Channel 的读、写、监听事件SelectionKey用于表示具体的事件对象ByteBuffer通过 SocketChannel 进行数据读写,依赖 ByteBufferServerSocketChannel 和 SocketChannel 同时支持阻塞式和非阻塞式,默认是阻塞式。可以通过如下的方法,打开非阻塞式。// 配置监听 ServerSocketChannel 为非阻塞模式ServerSocketChannel serverChannel = ServerSocketChannel.open();serverChannel.configureBlocking(false);// 配置服务器新建立的 SocketChannel 为非阻塞模式SocketChannel newSock = serverChannel.accept();newSock.configureBlocking(false);SocketAddress serverAddr = new InetSocketAddress("127.0.0.1", PORT);SocketChannel sock = SocketChannel.open(serverAddr);// 配置客户端 SocketChannel 为非阻塞sock.configureBlocking(false);
- 1.1 Java 中的编译 在 Java 中,程序不是直接被编译为可执行文件,而是被编译为字节码文件, JVM(Java虚拟机)在运行时执行字节码文件。当我们使用 javac 编译器时,Java 源代码文件被编译为字节码文件,字节码文件以扩展名 .class 的形式保存在磁盘上。当程序运行时,字节码文件将被转换为机器代码,并在内存中执行。总的来说,Java 源代码需要被“转换”两次才能被计算机执行:Java 源代码被编译为字节码:由 javac 前端编译器完成;字节码被编译为机器码:由 JVM 的执行引擎完成。下图描述了一个Java程序从编写到编译,再到执行的步骤:
- 2. Java 字节流结构 Java 的 java.io.* 包中包含了 InputStream 和 OutputStream 两个类,是 Java 字节流 I/O 的基础类,其他具体的 Java I/O 字节流功能类都派生自这两个类。图中只列出了我们 Socket 编程中常用的 I/O 字节流类。java.net.SocketInputStream 类是 Socket 的输入流实现类,它继承了 java.io.FileInputStream 类。java.net.SocketOutputStream 类是 Socket 的输出流实现类,它继承了 java.io.FileOutputStream 类,下来我们逐一介绍这些类的基本功能。
- 3. Java Socket 类分析 Java 语言抽象了 java.net.Socket 类,表示一个 Socket,既可以用在客户端,又可以用在服务器端。其实 java.net.Socket 也是一个包装类,对外抽象了一组公共方法,具体实现是在 java.net.SocketImpl 类中完成的,它允许用户自定义具体实现。java.net.Socket 类包含的主要功能如下:创建 Socket,具体就是创建一个 java.net.Socket 类的对象。建立 TCP 连接,可以通过 java.net.Socket 类的构造方法完成,也可以调用它的 connect 方法完成。将 Socket 绑定到本地接口 IP 地址或者端口,可以调用 java.net.Socket 类的 bind 方法完成。提示:服务器需要做 bind 操作,客户端一般不需要做 bind 操作。关闭连接,可以调用 java.net.Socket 类的 close 方法完成。接收数据,可以通过 java.net.Socket 类的 getInputStream 方法,返回一个 java.io.InputStream 对象实现数据接收。发送数据,可以通过 java.net.Socket 类的 getOutputStream 方法,返回一个 java.io.OutputStream 对象实现数据发送。java.net.Socket 类提供了一组重载的构造方法,方便程序员选择,大体分为四类:可以传入服务器的 host 和 port 参数原型如下: public Socket(String host, int port) throws UnknownHostException, IOException public Socket(InetAddress address, int port) throws IOException对于 host 参数,你可以传入 IP 地址或者是域名。当然,你可以传入构造好的 InetAddress 地址结构。在 java.net.Socket 的构造方法中,首先会构造一个 InetAddress 地址结构,然后进行域名解析,最后调用它的 connect 方法和服务器建立连接。可以传入绑定的本地地址参数原型如下: public Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException这类构造方法也可以传入 host 和 port 外,功能和上面类似。另外,还可以传入 localAddr 和 localPort,会调用 java.net.Socket 类的 bind 方法,绑定在本地的接口地址和端口。无参构造方法 public Socket()此构造方法,除了构造一个 java.net.Socket 类的对象,并不会去 connect 服务器。你需要调用它的 connect 方法连接服务器。public void connect(SocketAddress endpoint, int timeout) throws IOException自己调用 connect 方法,需要构造 SocketAddress 结构,当然你可以设置连接的超时时间,单位是毫秒(milliseconds)。访问代理服务器public Socket(Proxy proxy) 当你需要访问某个代理服务器时,可以调用此构造方法,Socket 会自动去连接代理服务器。创建一个简单的 java.net.Socket 客户端,示例代码如下:import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.IOException;import java.io.OutputStream;import java.net.InetSocketAddress;import java.net.Socket;import java.net.SocketAddress;public class TCPClient { // 服务器监听的端口号 private static final int PORT = 56002; private static final int TIMEOUT = 15000; public static void main(String[] args) { Socket client = null; try { // 在构造方法中传入 host 和 port // client = new Socket("192.168.43.49", PORT); // 调用无参构造方法 client = new Socket(); // 构造服务器地址结构 SocketAddress serverAddr = new InetSocketAddress("192.168.0.101", PORT); // 连接服务器,超时时间是 15 毫秒 client.connect(serverAddr, TIMEOUT); System.out.println("Client start:" + client.getLocalSocketAddress().toString()); // 向服务器发送数据 OutputStream out = new BufferedOutputStream(client.getOutputStream()); String req = "Hello Server!\n"; out.write(req.getBytes()); // 不能忘记 flush 方法的调用 out.flush(); System.out.println("Send to server:" + req); // 接收服务器的数据 BufferedInputStream in = new BufferedInputStream(client.getInputStream()); StringBuilder inMessage = new StringBuilder(); while(true){ int c = in.read(); if (c == -1 || c == '\n') break; inMessage.append((char)c); } System.out.println("Recv from server:" + inMessage.toString()); } catch (IOException e) { e.printStackTrace(); } finally { if (client != null){ try { client.close(); } catch (IOException e) { e.printStackTrace(); } } } }}这里我们创建的是阻塞式的客户端,有几点需要注意的地方:通过 OutputStream 的对象向服务器发送完数据后,需要调用 flush 方法。BufferedInputStream 的 read 方法会阻塞线程,所以需要设计好消息边界的识别机制,示例代码是通过换行符 ‘\n’ 表示一个消息边界。java.net.Socket 的各个方法都抛出了 IOException 异常,需要捕获。注意调用 close 方法,关闭连接。
- 3. socket 编程 下面的代码实现了一个 Socket 的服务端服务和一个客户端,服务端在 6000 端口上面监听连接,收到客户端的连接后向客户端发出 hello 问候语,客户端打印出服务端发送过来的消息。
- SOCKET 协议 Socket 是传输层协议的具体软件实现,它封装了协议底层的复杂实现方法,为开发人员提供了便利的网络连接。Socket 是网络编程的基石,像 Http 的请求,MySQL 数据库的连接等绝大部分的网络连接都是基于 Socket 实现的。
java中socket编程相关搜索
-
j2ee
j2ee是什么
jar格式
java
java api
java applet
java c
java jdk
java list
java map
java script
java se
java socket
java swing
java switch
java web
java xml
java 程序设计
java 多线程
java 环境变量