Java Socket编程入门:原理与实现
Socket(套接字)是IP地址与端口的组合句柄,用于应用程序向网络发起或应答请求。本文将重点解析Java环境下基于TCP协议的Socket通信原理,并提供可运行的服务端与客户端示例代码。
核心概念与关键方法
在Java中操作Socket,主要依赖以下三个核心方法构建双向通信:
accept():主要用于服务器端产生“阻塞”,等待客户端的连接请求。该方法一旦捕获到连接,将返回一个对应的Socket实例,用于后续与该特定客户端的数据交换。getInputStream():获取网络连接输入流,返回InputStream对象实例,用于接收对端发送的数据。getOutputStream():与输入流相反,获取输出流,用于向对端发送数据。
一般建立流程
建立Java Socket连接通常需要明确服务器端和客户端的角色分工:
- 服务器端:使用
ServerSocket监听指定端口,调用accept()等待客户端请求。连接成功后开始会话,完成交互后关闭连接。注意,通常由服务器端负责主导连接的关闭流程。 - 客户端:使用
Socket对象针对服务器的IP地址和端口发起链接请求。连接成功后进入会话阶段,传输数据完毕后关闭Socket。
示例代码:完整实现
第1步:配置服务器端(Server)
目的:创建一个能够监听指定端口并处理单次请求的服务程序。
入口与动作:初始化ServerSocket绑定端口(如10000),调用accept()阻塞等待。随后初始化输入输出流进行数据收发。
复制代码 代码如下:
package com.icer.server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Server
*
* @author Icer
*/
public class Server {
private ServerSocket ss;
private Socket s;
private BufferedReader br;
private PrintWriter pw;
public Server() {
try {
ss = new ServerSocket(10000);
System.out.println("Server is starting...");
// 阻塞等待,直到有客户端连接
s = ss.accept();
// 获取输入流,用于接收客户端消息
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
// 获取输出流,自动刷新以便立即发送
pw = new PrintWriter(s.getOutputStream(), true);
// 读取客户端发送的一行文本
String line = br.readLine();
System.out.println(line);
// 回复客户端
pw.println("your word is:" + line);
// pw.println("helloworld");
// 清理资源
br.close();
pw.close();
} catch (IOException ie) {
ie.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
new Server();
}
}
第2步:配置客户端(Client)
目的:主动连接到服务器,发送请求并接收响应。
入口与动作:实例化Socket指定目标IP(如127.0.0.1)和端口。获取输出流向服务器发送字符串,通过输入流读取服务器回显的数据。
复制代码 代码如下:
package com.icer.client;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
/**
* Client
* @author Icer
*/
public class Client {
private Socket s;
private BufferedReader br;
// private BufferedReader line;
private PrintWriter pw;
private String line = "";
public Client() {
try {
// 尝试连接本地10000端口
s = new Socket("127.0.0.1", 10000);
// 获取输出流发送数据
pw = new PrintWriter(s.getOutputStream(), true);
// 获取输入流接收响应
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
// 向服务器发送数据
pw.println("hello");
// 读取服务器的回显
line = br.readLine();
System.out.println(line);
// 清理资源
br.close();
pw.close();
} catch (IOException ie) {
ie.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
new Client();
}
}
以上就是Java Socket编程入门的原理与代码实现的详细内容,更多关于Java网络通信技术资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









