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编程的主要内容,如果未能解决你的问题,请参考以下文章

java socket-TCP

java是如何实现聊天功能的?

[linux] Linux网络之Socket编程入门

[linux] Linux网络之Socket编程入门

java中Socket通信

Java 实例演示-ServerSocket 和 Socket 通信实例