java 网络教程

转载自并发编程网 – ifeve.com

Java提供了非常易用的网络API,调用这些API我们可以很方便的通过建立TCP/IP或UDP套接字,在网络之间进行相互通信,其中TCP要比UDP更加常用

Java TCP网络基础

通常情况下,客户端打开一个连接到服务器端的TCP/IP连接,然后客户端开始与服务器之间通信,当通信结束后客户端关闭连接,过程如下图所示:

JavaSocket类和ServerSocket

当客户端想要打开一个连接到服务器的TCP/IP连接时,就要使用到Java Socket类。socket类只需要被告知连接的IP地址和TCP端口,其余的都有Java实现。

	public  void scoketTest () throws UnknownHostException, IOException{
		          //创建Socket
		Socket so = new Socket("192.168.200.13",80);

		//Socket发送数据,要通过Socket发送数据,我们需要获取Socket的输出流(OutputStream)
		OutputStream out= so.getOutputStream();
		out.write("nihao".getBytes());

		/**
		 * 想要通过网络将数据发送到服务器端,一定不要忘记调用flush()方法。
		 * 操作系统底层的TCP/IP实现会先将数据放入一个更大的数据缓存块中,而缓存块的大小是与TCP/IP的数据包大小相适应的
		 * 调用flush()方法只是将数据写入操作系统缓存中,并不保证数据会立即发送
		 */
		out.flush();
		out.close();

		//Socket读取数据,从Socket中读取数据,我们就需要获取Socket的输入流(InputStream)
		InputStream in=so.getInputStream();
		in.read();

		/**
		 * 从Socket的输入流中读取数据并不能读取文件那样,一直调用read()方法直到返回-1为止
		 * 因为对Socket而言,只有当服务端关闭连接时,Socket的输入流才会返回-1
		 * 而是事实上服务器并不会不停地关闭连接,假设我们想要通过一个连接发送多个请求,那么在这种情况下关闭连接就显得非常愚蠢。
		 */
		in.close();

		//关闭Socket,当使用完Socket后我们必须将Socket关闭,断开与服务器之间的连接。
		so.close();
	}

假如我们想要打开一个监听服务,来监听客户端连接某些指定TCP端口的连接,那就需要使用Java ServerSocket类。当客户端通过Socket连接服务器端的ServerSocket监听时,服务器端会指定这个连接的一个Socket,此时客户端与服务器端间的通信就变成Socket与Socket之间的通信。

	public void serverSocket () throws IOException{
		//创建ServerSocket类来监听9000端口
		ServerSocket serverSocket = new ServerSocket(9000);

		//监听请求的连接,要获取请求的连接需要用ServerSocket.accept()方法。该方法返回一个Socket类,该类具有普通java Socket类的所有特性
		Socket so = serverSocket.accept();

		//关闭客户端Socket
		so.close();

		//关闭服务端Sockets,要关闭服务的时候需要关掉 ServerSocket连接。
		serverSocket.close();
	}

在java.net包中包含两个有趣的类:URL类和URLConnection类。这两个类可以用来创建客户端到web服务器(HTTP服务器)的连接

	public void urlTest() throws IOException {

		URL url = new URL("http://www.baidu.com");
		URLConnection connection =url.openConnection();
		InputStream in= connection.getInputStream();
		int data = in.read();
		while (data!=-1) {
			System.out.println((char)data);
			data = in.read();
		}
		in.close();

		/**
		 * 默认情况下URLConnection发送一个HTTP GET请求到web服务器。
		 * 如果你想发送一个HTTP POST请求,要调用URLConnection.setDoOutput(true)方法
		 * 一旦你调用了setDoOutput(true),你就可以打开URLConnection的OutputStream
		 */
		connection.setDoOutput(true);
		OutputStream out= connection.getOutputStream();
			//TODO
	}

URL类打开一个本地文件系统文件

	private void urlReadFileTest() throws Exception {
		/**
		 * URL也被叫做统一资源定位符。如果你的代码不关心文件是来自网络还是来自本地文件系统,URL类是另外一种打开文件的方式
		 * 这和通过HTTP访问一个web服务器上的文件的唯一不同处就是URL:"file:/c:/data/test.txt"
		 */
		URL url = new URL("file:/c:/data/test.txt");
		URLConnection urlConnection = url.openConnection();
		InputStream input = urlConnection.getInputStream();
		int data = input.read();
		while(data != -1){
			System.out.print((char) data);
			data = input.read();
		}
		input.close();
	}
时间: 2024-10-28 20:47:46

java 网络教程的相关文章

Java网络编程和NIO详解开篇:Java网络编程基础

Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为我们拥有网络.网络是一个神奇的东西,它改变了你和我的生活方式,改变了整个世界. 然而,网络的无标度和小世界特性使得它又是复杂的,无所不在,无所不能,以致于我们无法区分甚至无法描述. 对于一个码农而言,了解网络的基础知识可能还是从了解定义开始,认识OSI的七层协议模型,深入Socket内部,进而熟练地

java网络编程入门教程

网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.

Java快速教程

Java快速教程 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Java是面向对象语言.这门语言其实相当年轻,于1995年才出现,由Sun公司出品.James Gosling领导了Java的项目小组.该项目的最初只想为家电设计一门容易移植的语言.然而,在获得了Netscape浏览器支持后,Java快速推广,应用广泛. Java受到C和C++的强烈影响.Java与C++相近,都是静态类型,但移除了C++中容易出错的一些特征,比

[转] Java快速教程

[转] Java快速教程 转自:Vamei的Java快速教程 2015-07-03 安装环境 Step 1: Eclipse JDK 下载.安装.配置 (download.install.deploy) Step 2: eclipse Eclipse JDK 下载.安装.配置 (download.install.deploy) Java是面向对象语言.这门语言其实相当年轻,于1995年才出现,由Sun公司出品.James Gosling领导了Java的项目小组.该项目的最初只想为家电设计一门容易

JAVA王牌教程

Java基础 在Java基础系列文章中,我将说明Java的基础内容,特别是面向对象的相关概念. Java基础01 从HelloWorld到面向对象 Java基础02 方法与数据成员 Java基础03 构造器与方法重载 Java基础04 封装与接口 Java基础05 实施接口 Java基础06 组合 Java基础07 包 Java基础08 继承 Java基础09 类数据与类方法 Java基础10 接口的继承与抽象类 Java基础11 对象引用 Java基础12 多态 Java进阶 在Java进阶中

Java IO教程

1  Java IO 教程 2 Java IO 概述 3 Java IO: 文件 4 Java IO: 管道 5 Java IO: 网络 6 Java IO: 字节和字符数组 7 Java IO: System.in, System.out, and System.error 8 Java IO: 流 9 Java IO: Input Parsing(暂无翻译,处理中) 10 Java IO: Readers and Writers 11 Java IO: 并发IO 12 Java IO: 异常

Java网络编程——Socket

网络是连接不同计算机的媒介,不同的计算机依靠网络来互相通信,即传递数据. Java中与网络编程相关的部分主要是Socket(套接字),它作为一种抽象的结构,实现了与通信相关的各类方法,构成一套完整的通信机制. 当然,Socket本身是独立于编程语言之上的概念,就像数据结构与算法一样,它并不属于Java,而是一种公认的通信的解决方案,大部分语言都实现了与socket相关的通信功能. 原理 Socket通过使用TCP(传输控制协议)提供了两台计算机之间的通信机制.具体的方式是:服务器处会首先创建Se

Java - 30 Java 网络编程

Java 网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net包中J2SE的API包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节. java.net包中提供了两种常见的网络协议的支持: TCP: TCP是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信.通常用于互联网协议,被称TCP / IP. UDP:UDP是用户数据报协议的缩写,一个无连接的协议.提供了应用程序之间要发送的数

Java基础教程(25)--I/O流

??I/O流表示输入源或输出目标.流可以表示许多不同类型的源和目标,例如磁盘文件.设备.其他程序等. ??流支持许多不同类型的数据,包括字节.原始数据类型.字符和对象等.有些流只传递数据; 有些流则可以操纵和转换数据. ??无论各种流的内部是如何工作的,所有流都提供相同的简单模型:流是一系列数据.程序使用输入流从源头获取数据,一次一项: ??程序使用输出流将数据写入目的地,一次一项: ??在本文中,我们会看到流可以处理各种各样的数据,无论是基本数据还是复杂对象.先来几张IO流的全家福: ??In