Java 为 TCP 协议提供了两个类: Socket 类和 ServerSocket 类。 一个 Socket 实例代表了TCP 连接的一端。 一个 TCP 连接 ( TCP connec ti on ) 是一条抽象的双向信道, 两端分别由 IP地址和端口号确定。 在开始通信之前, 要建立一个 TCP 连 接, 这需要先由客户端 TCP 向服务器端 TCP 发送连接请求。 ServerSocket 实例则 监听 TCP 连 接请求,并为每个请求创建新的 Socket 实 例。也就是说,服务器端要同时处理 ServerSocket 实例 和 Socket 实例, 而客户端只需要使用 Socket 实例 。
典型的 TCP 客户端要经过下面三步:
1.创建一个 Socket 实例: 构造器向指定的远程主机和端口建立一个 TCP 连接。
2. 通过套接字的输入输出流(I/O streams)进行通信:一个 Socket 连接实例包括一个InputStream 和一个 OutputStream,它们的用法同于其他 Java 输入输出流。
3. 使用 Socket 类的 close()方法关闭连接。
典型的 TCP 服务器有如下两步工作:
1. 创建一个 ServerSocket 实例并指定本地端口。此套接字的功能是侦听该指定端口收到的连接。
2. 重复执行:
a. 调用 ServerSocket 的 accept() 方法以获取下一个客户端连接。基于新建立的客户端连接,创建一个 Socket 实例,并由 accept() 方法返回。
b. 使用所返回的 Socket 实例的 InputStream 和 OutputStream 与客户端进行通信。
c. 通信完成后,使用 Socket 类的 close() 方法关闭该客户端套接字连接。
客户端代码:
package com.iteye.xuj.socket; import java.net.Socket; import java.net.SocketException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class TestClient { public static void main(String[] args) throws IOException { // 地址、数据、端口 String server = "127.0.0.1"; byte[] data = "测试数据".getBytes(); int servPort = 7; // 创建TCP套接字 Socket socket = new Socket(server, servPort); System.out.println("Connected to server...sending echo string"); // 获取套接字的输入输出流 InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); // 发送字符串到回馈服务器 out.write(data); // 从回馈服务器接受回馈信息 int totalBytesRcvd = 0; int bytesRcvd; while (totalBytesRcvd < data.length) { if ((bytesRcvd = in.read(data, totalBytesRcvd, data.length - totalBytesRcvd)) == -1) throw new SocketException("Connection closed prematurely"); totalBytesRcvd += bytesRcvd; } System.out.println("Received: " + new String(data)); // 关闭套接字 socket.close(); } }
服务器端代码
package com.iteye.xuj.socket; import java.net.*; import java.io.*; public class TestServer { private static final int BUFSIZE = 32; public static void main(String[] args) throws IOException { //端口号 int servPort = 7; //创建服务器端套接字,servSock侦听特定端口号上的客户端连接请求 ServerSocket servSock = new ServerSocket(servPort); int recvMsgSize; byte[] receiveBuf = new byte[BUFSIZE]; //永久循环,迭代处理新的连接请求 while (true) { //接受新的连接请求 Socket clntSock = servSock.accept(); //报告已连接的客户端 SocketAddress clientAddress = clntSock.getRemoteSocketAddress(); System.out.println("Handling client at " + clientAddress); //获取套接字的输入输出流 InputStream in = clntSock.getInputStream(); OutputStream out = clntSock.getOutputStream(); //接收并复制数据,直到客户端关闭 while ((recvMsgSize = in.read(receiveBuf)) != -1) { out.write(receiveBuf, 0, recvMsgSize); } //关闭客户端套接字 clntSock.close(); } } }
直接运行客户端输出如下:
Exception in thread "main" java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:529) at java.net.Socket.connect(Socket.java:478) at java.net.Socket.<init>(Socket.java:375) at java.net.Socket.<init>(Socket.java:189) at com.iteye.xuj.socket.TestClient.main(TestClient.java:18)
先运行服务器端,再运行客户端:
服务器端输出如下:
Handling client at /127.0.0.1:24635
客户端输出如下:
Connected to server...sending echo string Received: 测试数据
相关推荐
Java TCP-IP Socket编程-卡尔弗特.pdf,结合java开发基于tcpip协议的socket编程
Java tcp socket 编程,聊天室
TCP 协议基础教学代码,一个server 一个 client,client从txt文件里面摘取名人名言语句发给server
在 Java 中,可以使用 Socket 编程来实现 Modbus TCP 通信。首先,需要创建一个 Socket 对象,用于连接到 Modbus 设备。然后,需要根据 Modbus TCP 协议的报文格式编码报文,发送到设备端。设备端将回复响应报文,...
JAVA TCP-IP Socket 网络通信编程研究 JAVA TCP-IP Socket 网络通信编程研究是关于使用 Java 语言实现基于 TCP/IP 协议的网络通信编程的研究。该研究主要关注于使用 Java Socket 实现 TCP/IP 网络程序框架及网络...
Java TCP-IP Socket编程(原书第2版)_41467.azw3
TcpSocket createConnection() 服务器listen() 维护者 致谢 执照 入门 使用任一Yarn安装库: yarn add react-native-tcp-socket 或npm: npm install --save react-native-tcp-socket 覆盖net 由于react-...
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程...
《Java TCP/IP Socket编程(原书第2版)》基于TCP/IP Socket相关原理,对如何在Java中进行Socket编程作了深入浅出的介绍。《Java TCP/IP Socket编程(原书第2版)》内容简明扼要,条理清晰,并在讲解相应的概念或编程...
HP-Socket是一套通用的高性能TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的TCP/UDP/HTTP通信系统,提供C/C++、C#、Delphi、E(易语言)、Java、Python等编程语言...
java socket client 断线重连的简单实现 有什么意见可以提哦
HP-Socket 是一套通用的高性能 TCP/UDP Socket 组件,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E、Java 等编程语言开发接口。HP-Socket ...
java Socket 和多线程 实现的通信客户端和服务端 可并发连接
HP-Socket 是一套通用的高性能 TCP/UDP Socket 组件,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言...
SpringMVC的Socket实现+Java Tomcat websocket实现+Java Socket通信实现 +Java UDP通信实现。websocket_study.rar 为springMVC版本的socket实现 websocket02.rar 里面包含tomcat的websocket实现+java socket双向通信...
TCP IP Socket 免费 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
* 高度灵活性:Java Socket 编程可以实现多种网络协议,例如 TCP/IP、UDP 等。 * 高效性:Java Socket 编程可以实现高效的网络传输。 Java Socket 编程在计算机网络实验中的应用 在计算机网络实验中,Java Socket ...
2) 基于Java Socket TCP和UDP实现一个简易的网络文件服务程序,包含服务器端FileServer和客户端FileClient; 3) 服务器端启动时需传递root目录参数,并校验该目录是否有效; 。。。。。。附带简单的实验报告,只需...
Java Socket 编程基于 TCP/IP 协议,使用 Socket 类来实现网络通信。 Socket 类是 Java 语言中用于实现网络通信的类,提供了许多方法来实现网络通信。 在 Java 中,Socket 编程的原理是基于客户端/服务器架构的。...