Core Java第十五章知识点总结——网络编程 – DBA

Core Java第十五章知识点总结——网络编程

知识点预览

网络应用的结构

网络中的基本概念

TCP编程

UDP编程

URL编程

网络应用的结构

1. 网络应用的结构

2. IP地址

a) 概念:用于唯一识别连接到Internet上的计算机

b) 地址表示形式

i. IPV4:点分十进制表示方式,四个整数用点分开,每个十进制数字代表一个8bits整数 如 192.168.123.1

ii. IPV6:点分十六进制表示方式,八个整数用点分开,每个十六进制数字代表一个16bits整数 如:CDCD:910A:2222:5498:8475:1111:3900:2020

3.域名 便于记忆 由DNS(域名服务器)进行解析

4.本地IP 127.0.0.1等同于localhost

5.端口号 数字 计算机网络中的计算机唯一标识一个软件(或者说进程)

6.协议

TCP编程

1.TCP协议简介

TCP协议是一个有连接、可靠的协议。

类似于打电话

可靠:数据不会丢失,接收方接收的数据包有序

2. TCP编程

java.net.Socket//套接字

java.net.ServerSocket

3. TCP编程的核心思路

a)开发服务器端

ServerSocket ss = newServerSocket();

ss.accept();

b) 开发客户端

Socket s = new Socket(“150.236.56.101”,9000);

4.总结

a)服务器端

i. 创建ServerSocket对象(并绑定端口)

ii.调用accept方法,等待客户端的连接

iii.调用getXXXStream,并进行I/O

iv.关闭Socket

b) 客户端

i.创建Socket对象,并连接服务器

ii. 调用getXXXStream,并进行I/O

iii.关闭Socket

5. 具体示例

a) 客户端发送一个helloworld串

package chp15.ex01;import java.io.PrintWriter;import java.net.Socket;/** *  * @Author: Wentasy * @FullName: TCPClient.java * @Description: TCP客户端的创建 * @Create Date: 2012-8-20 */public class TCPClient {public static void main(String[] args) throws Exception {//创建Socket对象(并连接服务器)Socket s = new Socket("127.0.0.1", 9001);//调用getXXXStream方法,进行I/OPrintWriter pw = new PrintWriter(s.getOutputStream());pw.println("hello world");pw.flush();//关闭 s.close();}}

b) 服务器端接受字符串并打印

package chp15.ex01;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;/** *  * @Author: Wentasy * @FullName: TCPServer.java * @Description: TCP服务器端的创建 * @Create Date: 2012-8-20 */public class TCPServer {public static void main(String[] args) throws Exception {//创建ServerSocket对象(并绑定端口)ServerSocket ss = new ServerSocket(9001);//调用accept方法Socket s = ss.accept();//调用getXXXStream方法,进行I/OBufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));String line = br.readLine();System.out.println(line);//关闭Sockets.close();  }} 

c)客户端发送一个helloworld串,并接受服务器端回传的from serve helloworld

package chp15.ex02;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;/** *  * @Author: Wentasy * @FullName: TCPClient.java * @Description: TCP 客户端 完成读写 * @Create Date: 2012-8-20 */public class TCPClient {public static void main(String[] args) throws Exception {//创建Socket对象(并连接服务器)Socket s = new Socket("127.0.0.1", 9000);//调用getXXXStream方法,进行I/OPrintWriter pw = new PrintWriter(s.getOutputStream());pw.println("hello world");pw.flush();    BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));String line = br.readLine();        System.out.println(line);//关闭Sockets.close();}}

d)服务器端回传的from serve helloworld

package chp15.ex02;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;/** *  * @Author: Wentasy * @FullName: TCPServer.java * @Description: TCP服务器端 完成读写 * @Create Date: 2012-8-20 */public class TCPServer {public static void main(String[] args) throws Exception {ServerSocket ss = new ServerSocket(9000);Socket s = ss.accept();BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));String line = br.readLine();PrintWriter pw = new PrintWriter(s.getOutputStream());pw.println("from server" + line );pw.flush();s.close();}}

6. 程序存在的问题:服务器只能运行一次

while(true){

调用accept()方法

调用getXXXStream方法,进行I/O

关闭Socket

}

package chp15.ex03;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;/** *  * @Author: Wentasy * @FullName: TCPServer.java * @Description: TCP 服务器端 带多线程 * @Create Date: 2012-8-20 */class ServerThread extends Thread{private Socket s;    public ServerThread(Socket s) {this.s = s;}public void run(){try{BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));String line = br.readLine();PrintWriter pw = new PrintWriter(s.getOutputStream());pw.println(line + " from server");pw.flush();} catch (IOException e) {e.printStackTrace();}finally{try {s.close();} catch (IOException e) {e.printStackTrace();}}}}public class TCPServer {public static void main(String[] args) throws Exception {ServerSocket ss = new ServerSocket(9000);while(true){  Socket s = ss.accept();  Thread st = new ServerThread(s);  st.start();}}}package chp15.ex03;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;/** *  * @Author: Wentasy * @FullName: TCPClient.java * @Description: TCP 客户端 * @Create Date: 2012-8-20 */public class TCPClient {public static void main(String[] args) throws Exception {//创建Socket对象(并连接服务器)Socket s = new Socket("127.0.0.1", 9000);//调用getXXXStream方法,进行I/OPrintWriter pw = new PrintWriter(s.getOutputStream());pw.println("hello world");pw.flush();    BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));String line = br.readLine();        System.out.println(line);//关闭Sockets.close();}}

UDP编程

1.UDP协议简介

UDP是一个无连接,不可靠的协议。即:数据的发送方只负责将数据发送出去,数据的接收方值负责接收数据。发送方和接收方不会相互确认数据的传输是否成功。

存在的意义:效率高,在实时性较强的场合适用。

示例:发短信

2.UDP编程

java.net.DatagramSocket(想象成传真机)

java.net.DatagramPacket(想象成传真机上的纸)

3.UDP编程的核心思路

a) 服务器端 DatagramSocket socket = new DatagramSocket(9000);

b) 客户端 DatagramSocket socket = new DatagramSocket();

客户端不用端口号

端口号和协议相关 本机TCP和UDP可以使用相同的端口号

4. DatagramPacket

DatagramPacket(byte[] buf, int offset,int length);

DatagramPacket(byte[] buf, int offset,int length,SocketAddress);

SocketAddress:接口 使用时用它的实现类 InetSocketAddress

getAddress()/getSoketAddress()/getPort()/getLength()

setAddress()/setSoketAddress()/setPort()/setLength()

package chp15.ex05;import java.net.DatagramPacket;import java.net.DatagramSocket;/** *  * @Author: Wentasy * @FullName: UDPServer.java * @Description: UDP 服务器端 完成读写 * @Create Date: 2012-8-20 */public class UDPServer {public static void main(String[] args) throws Exception {DatagramSocket socket = new DatagramSocket(9000);  byte[] buf = new byte[100];DatagramPacket paper = new DatagramPacket(buf, 0, buf.length);socket.receive(paper);String str = new String(buf, 0 , paper.getLength());System.out.println(str);byte[] data = "hello client".getBytes();DatagramPacket packet = new DatagramPacket(data, 0 ,data.length,paper.getSocketAddress()       );socket.send(packet);socket.close();        }}package chp15.ex05;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetSocketAddress;/** *  * @Author: Wentasy * @FullName: UDPClient.java * @Description: UDP 客户端 完成读写 * @Create Date: 2012-8-20 */public class UDPClient {public static void main(String[] args) throws Exception {DatagramSocket socket = new DatagramSocket();String str = "hello server";byte[] data = str.getBytes();DatagramPacket packet = new DatagramPacket(data, 0, data.length,new InetSocketAddress("127.0.0.1", 9000));socket.send(packet);byte[] buf = new byte[100];DatagramPacket paper = new DatagramPacket(buf, 0, buf.length);socket.receive(paper);String msg = new String(buf, 0, paper.getLength());System.out.println(msg);socket.close();}}

URL编程

1. URL概念

URL统一资源定位符——互联网中唯一定位一个资源

2. URL组成

协议名://主机名(或者IP地址):端口号/资源

http://localhost:8080/web/a.jpg

http://www.oracle.com/index.html

3. URL编程

a) URL

b)URLConnection

4. URL编程思路

a) 创建URL对象

b) 调用URL对象的openConnection方法获得URLConnection对象

c) 调用URLConnection对象的getInputStream方法,获得输入流,从而获得资源

d) I/O操作

e) 关闭资源

package chp15.ex06;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.URL;import java.net.URLConnection;/** *  * @Author: Wentasy * @FullName: TestURL.java * @Description: URL 编程 * a)创建URL对象b)调用URL对象的openConnection方法获得URLConnection对象c)调用URLConnection对象的getInputStream方法,获得输入流,从而获得资源d)I/O操作e)关闭资源 * @Create Date: 2012-8-20 */public class TestURL {public static void main(String[] args) throws Exception {//创建URL对象URL url = new URL("http://www.oracle.com");//调用URL对象的openConnection方法,获得URLConnectionURLConnection conn = url.openConnection();//调用URLConnection方法的getInputStreamInputStream in = conn.getInputStream();//I/O操作BufferedReader br = new BufferedReader(new InputStreamReader(in));String line = null;while( (line=br.readLine()) != null ){System.out.println(line);}br.close(); }}

“人无完人金无足赤”,只要是人就不会是完美的,

Core Java第十五章知识点总结——网络编程 – DBA

相关文章:

你感兴趣的文章:

标签云: