黑马程序员---java基础-Java之网络编程

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、概念

网络通信三要素:IP地址,端口号,传输协议

IP地址:

它是网络中的设备标识,java中对应的是InetAddress类,存在于java.net包中。

端口号:

a、用于标识进程的逻辑地址,不用进程的标识。

b、有效端口:0 ~65535,系统使用或保留的端口是:0~ 1024。

传输协议:

即通信规则,包含TCP和UDP协议

二、Socket

套接字,通信的端点。

就是为网络服务提供的一种机制,通信的两端都有Socket,网络通信其实就是Socket间的通信,数据在两个Socket间通过IO传输。

示例:

 1 public class NetDemo {
 2     public static void main(String[] args) throws Exception {
 3         Socket s = new Socket("www.baidu.com", 8080);
 4         BufferedReader br = new BufferedReader(new InputStreamReader(
 5                 s.getInputStream()));
 6         String line;
 7         while ((line = br.readLine()) != null) {
 8             System.out.println(line);
 9         }
10     }
11 }

三、TCP传输

两个端点的建立连接后会有一个传输数据的通道,这通道称为流,而且是建立在网络基础上的流,称之为socket流。该流中既有读取,也有写入。

tcp的两个端点:

一个是客户端,一个是服务端。

客户端:对应的对象,Socket

服务端:对应的对象,ServerSocket

TCP客户端:

1,建立tcp的socket服务,最好明确具体的地址和端口。这个对象在创建时,就已经可以对指定ip和端口进行连接(三次握手)。

2,如果连接成功,就意味着通道建立了,socket流就已经产生了。只要获取到socket流中的读取流和写入流即可,只要通过getInputStream和getOutputStream就可以获取两个流对象。

3,关闭资源。

TCP服务端:

1,创建服务端socket服务,并监听一个端口。

2,服务端为了给客户端提供服务,获取客户端的内容,可以通过accept方法获取连接过来的客户端对象。

3,可以通过获取到的socket对象中的socket流和具体的客户端进行通讯。

4,如果通讯结束,关闭资源。注意:要先关客户端,再关服务端。

tcp客户端:

 1 public class TcpClient {
 2     public static void main(String[] args) throws Exception {
 3         Socket s;
 4         s = new Socket("127.0.0.1", 1000);
 5         OutputStream os = s.getOutputStream();
 6         os.write("你好".getBytes());
 7         InputStream is = s.getInputStream();
 8         byte[] buff = new byte[1024];
 9         int len;
10         len = is.read(buff);
11         System.out.println(new String(buff, 0, len));
12         s.close();
13     }
14 }

tcp服务端:

public class TcpServer {
    public static void main(String[] args) throws Exception {
        ServerSocket ss = new ServerSocket(1000);
        Socket s = ss.accept();
        String ip = s.getInetAddress().getHostAddress();
        System.out.println(ip + "is connected");
        InputStream is = s.getInputStream();
        byte[] buff = new byte[1024];
        int len = is.read(buff);
        System.out.println(new String(buff, 0, len));
        OutputStream os = s.getOutputStream();
        os.write("已收到".getBytes());
        s.close();
        ss.close();
    }
}

客户端和服务的浏览器演示:

浏览器是一个标准的客户端,它可以对服务端传送过来的数据消息进行解析,把符合应用层协议的消息部分解析后,将头信息拆包掉,传送到应用层,只保留了正确的正文主题部分显示在主体部分上。

而由于使用java编译是在传输层和网际层处理的,所以,会接受到全部的消息,包含了头消息。而浏览器处于应用层,已将发送来的头消息去除,只留下了主体信息。

 1 /*
 2  * 在浏览器输入:http://localhost:11000/
 3  * 即可访问,返回"客户端你好"
 4  */
 5 public class ServerDemo {
 6
 7     public static void main(String[] args) throws Exception {
 8         ServerSocket ss = new ServerSocket(11000);
 9
10         System.out.println("等待接收...");
11         Socket s = ss.accept();
12         System.out.println("成功");
13         System.out.println(s.getInetAddress().getHostAddress());
14
15         InputStream in = s.getInputStream();
16         byte[] buf = new byte[1024];
17         int len = in.read(buf);
18         System.out.println(new String(buf, 0, len));
19
20         // 返回信息写入客户端输出流
21         PrintWriter out = new PrintWriter(s.getOutputStream(), true);// true一定要写
22         out.println("<font color=‘red‘ size=‘7‘>客户端你好</font>");
23         s.close();
24         ss.close();
25     }
26 }

四、URL和URLConnection

1、URL:

URI:范围更大,条形码也包含于此范围

URL:范围较小,即域名

方法:

1)构造函数:URL(String protocol,String host,int port,String file);//根据指定 protocol、host、port号和 file 创建 URL对象。

2)String getProtocol();//获取协议名称

3)String getHost();//获取主机名

4)int getPort();//获取端口号

5)String getFile();//获取URL文件名

6)String getPath();//获取此URL的路径部分

7)String getQuery();//获取此URL的查询部,客户端传输的特定信息

注:一般输入网址,是不带端口号的,此时可进行获取,通过获取网址返回的port,若port为-1,则分配一个默认的80端口,如

int port = getPort();

if(port == -1)

port = 80;

2、URLConnection

方法:

1)URLConnection openConnection();//用URL调用此方法,返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。

2)InputStream getInputStream();//获取输入流

3)OutputStream getOutputStream();//获取输出流

例:

 1 public class URLConnectionDemo {
 2     public static void main(String[] args) {
 3         // TODO Auto-generated method stub
 4         /*try {
 5             URL url = new URL("http://www.baidu.com");
 6
 7             URLConnection conn = url.openConnection();
 8
 9             InputStream is =conn.getInputStream();
10             byte[] buff = new byte[1024];
11             int len;
12             len = is.read(buff);
13             System.out.println(new String(buff, 0, len));
14
15         } catch (MalformedURLException e) {
16             // TODO Auto-generated catch block
17             e.printStackTrace();
18         }catch (IOException e) {
19             // TODO Auto-generated catch block
20             e.printStackTrace();
21         }*/
22
23         URL url;
24         try {
25             url = new URL("http://192.168.1.254/myweb/demo.html?name=haha&age=30");
26             System.out.println("getProtocol() :"+url.getProtocol());
27             System.out.println("getHost() :"+url.getHost());
28             System.out.println("getPort() :"+url.getPort());
29             System.out.println("getPath() :"+url.getPath());
30             System.out.println("getFile() :"+url.getFile());
31             System.out.println("getQuery() :"+url.getQuery());
32
33             /*int port = getPort();
34             if(port==-1)
35                 port = 80;
36             getPort()==-1
37             */
38         } catch (MalformedURLException e) {
39             // TODO Auto-generated catch block
40             e.printStackTrace();
41         }
42     }
43 }
44 /*
45  *  getProtocol() :http
46     getHost() :192.168.1.254
47     getPort() :-1
48     getPath() :/myweb/demo.html
49     getFile() :/myweb/demo.html?name=haha&age=30
50     getQuery() :name=haha&age=30
51  */
时间: 2024-10-21 02:06:34

黑马程序员---java基础-Java之网络编程的相关文章

黑马程序员 &nbsp; 两道java面试题

1.List,Set,Map是否都继承了Collection接口?  List,Map比较常用:List是通过下标来访问元素,Map是通过键值进行访问元素.应该不会同时都实现了Collection接口.  Collection是一个什么概念?还有Set在java中是怎样定义的?他是通过下标来访问元素还是通过键值来访问元素?两者谁继承了Collection接口呢?或者有没有可能两者都继承了Collection接口?时间不多了,我是这样写的:  Set,Map实现了Collection接口.而Lis

黑马程序员 【】java学习之路——TCP(三)客户端上传文件到服务器

------- <a href="http://www.itheima.com" target="blank">android培训</a>.<a href="http://www.itheima.com" target="blank">java培训</a>.期待与您交流! ---------- import java.io.*; import java.net.*; class

黑马程序员_Java异常 Java常用库类

Java异常 1,异常的基本概念 异常是导致程序中断运行的一种指令流,它是在运行时期发生的不正常的情况,在Java中,一切的异常都秉着面向对象的设计思想,所有的异常都是以对象和类的形式存在的. 2,异常类的继承结构 在整个Java的异常结构中,实际上有两个最常用的类,Exception和Error,这两个类分别是Throwable的子类 Exception:一般表示的是程序中出现的问题,可以直接使用try....catch处理 Error:一般之的是JVM的错误,程序中无法处理. 3,Java的

黑马程序员_JAVA 基础加强学习笔记

一.面向对象 (一)继承  1.继承的好处: (1) 提高了代码的复用性. (2) 让类与类之间产生了关系,提供了另一个特征多态的前提. 注意: 子类中所有的构造函数都会默认访问父类中的空参数的构造函数,因为每一个子类构造内第一行都有默认的语句super();  如果父类中没有空参数的构造函数,那么子类的构造函数内,必须通过super语句指定要访问的父类中的构造函数. 如果子类构造函数中用this来指定调用子类自己的构造函数,那么被调用的构造函数也一样会访问父类中的构造函数. 2.final特点

黑马程序员_Java基础加强(下)

8.注解类 注解相当于一种标记,加了注解就等于打上了某种标记,没加就等于没打特殊标记,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记就去干什么事,标记可以加在包.类.字段.方法,方法的参数以及局部变量上. 注解的应用结构图: 为注解增加属性 定义基本类型的属性和应用属性 在注解类中增加String color(); @MyAnnotation(color = "red") 用反射方式获得注解对应的实例对象后,再通过该对象调用属性对应的方法 MyAnno

黑马程序员_Java基础加强(上)

1.静态导入 静态导入是jdk1.5版本以后出现的新特性,一般是指导入静态方法,如:import static java.lang.System.out 是指导入系统输出的静态方法. 例: import static java.lang.System.out //导入java.lang包下的System类的静态方法out public class StaticImport { public static void main(String[] args) { int x=1; x++; out.p

黑马程序员-正则表达式基础

正则表达式是一种描述字符串集的方法,它是以字符串集中各字符串的共有特征为依据的.正则表达式可以用于搜索.编辑或者是操作文本和数据.它超出了 Java 程序设计语言的标准语法,因此有必要去学习特定的语法来构建正则表达式.正则表达式的变化是复杂的,一旦你理解了它们是如何被构造的话,你就能解析或者构建任意的正则表达式了..正则表达式由一些普通字符和一些元字符组成. 普通字符包括大小写的字母和数字,而元字符则具有特殊的含义.在最简单的情况下,一个正则表达式看上去就是一个普通的查找串.例如,正则表达式"a

黑马程序员_Java基础_接口

------- android培训.java培训.期待与您交流! ---------- 0.接口知识体系 Java接口的知识体系如下图所示,掌握下图中的所有知识就可精通接口. 1.接口概论 1)接口概念 接口是从多个相似类中抽象出来的规范,接口中不包含普通方法,所有方法都是抽象方法,接口不提供实现.接口体现的是规范和实现分离的哲学.规范和实现分离正是接口的好处,让软件系统的各个组件之间面向接口耦合,是一种松耦合的设计.接口定义的是多个类共同的公共行为规范,定义的是一组公用方法. 2)接口与抽象类

黑马程序员——集合基础知识(Map)

Map概念 要同时存储两个元素,他们之间有映射关系,每个键不能重复,每个键只能映射到一个值. 存储键值对,并且键是唯一的. 1.添加. put()如果添加的键原来有值,后添加的值会覆盖前面的值,并返回之前的值. 2.删除 remove()按键删除. 3.判断 4.获取 get(object key) size() value()拿值value返回的是值的集合... HashTable 底层是哈西数据结构,不可以存入null键null值,线程同步. HashMap 底层是哈西表数据结构,允许使用n

黑马程序员_Java基础String类

- - - - - android培训.java培训.期待与您交流! - - - - - - - String是一个对象 String不属于8种基本数据类型(byte, char, short, int, float, long, double, boolean),String是对象,所以其默认值是null. String是一种特殊的对象,有其它对象没有的一些特性,通过JDK发现: public final class String implements java.io.Serializable