Java Socket编程
Posted 浴盆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Socket编程相关的知识,希望对你有一定的参考价值。
Socket概念
tcp协议全称是Transmission Control Protocol,传输控制协议,是以字节流的方式发送数据的协议。ip全称为Internet Protocol互联网协议,tcp/ip协议在四层模型中的传输层。http、ftp、telnet(ssh)远程登录服务为应用层协议,是应用层感知和选择的协议。
IP地址+端口号组成了socket的逻辑概念,socket是tcp/ip的基础。
InetAddress类
InetAddress没有构造方法,无法通过new来构造对象,这个类在静态方法中直接返回了InetAddress类的实例。
getLocalHost 获取本地主机的InetAddress类实例
获取InetAddress类实例后可以通过getHostAddress返回IP地址字符串
可以通过主机名、IP地址等来获取相应的InetAddress类实例(host主机名唯一标识一台机器)
URL类
URL url = new Url("https://www.taobao.com");
URL newUrl = new Url(url, "/index.html");
// 可以通过实例的方法获取信息
url.getProtocol();
url.getHost();
可以通过openStream方法发起网络调用
URL url = new Url("https://www.taobao.com");
// 通过url的openStream方法获取字节输入流(TCP以字节流的形式发送数据)
InputStream is = url.openStream();
// 将字节输入流转换为字符(一个字符占多个字节)输入流,指定字符集编码
InputStreamReader isr = new InputStreamReader(is, "utf-8");
// 为字符输入流提供缓冲
BufferedReader br = new BufferedReader(isr);
String data = br.readLine();
br.close();
基于TCP的socket通信模型
首先server端建立SeverSocket对某个端口进行监听,然后client建立socket发送请求,server端收到请求建立连接,通过InputStream和outputStream进行通信。完成通信之后关闭socket和相关资源,结束通信。
服务器端步骤:
// 创建服务器端socket实例
ServerSocket serverSocket = new ServerSocket(8080);
// 使用accept方法开始监听,一旦监听到请求会返回socket实例
Socket socket = serverSocket.accept();
// 获取输入流,其他过程同上
InputStream is = socket.getInputStream();
客户端步骤:
// 指定服务器地址和端口号,本机的话指定localhost或者127.0.0.1
Socket socket = new Socket("127.0.0.1", 8080);
// 获取输出流,向服务器端发送信息
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("admin: yupen");
// ...省略其他步骤
相同地,服务端也可以通过输出流向客户端发送信息
服务器端响应多客户端
可以通过多线程来解决这个问题
while(true)
// 只有监听到才会继续往下执行
socket = serverSocket.accept();
// 创建一个线程进行处理 ...
以上是关于Java Socket编程的主要内容,如果未能解决你的问题,请参考以下文章