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

来源:互联网 发布:山东网络电视台 编辑:程序博客网 时间:2024/06/06 07:21
 

----------android培训java培训java学习型技术博客、期待与您交流!------------


在此,分享一下自己学习JAVA的学习心得。有不对的地方请帮忙改正,也希望对想java的同学有帮助!


JAVA基础

--网络编程


 网络基本知识:


  1)OSI参考模型
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

2)TCP/IP参考模型
应用层、传输层、网际层、主机至网络层


网络通讯要素 :


 IP地址:用于标记一台计算机的身份证。IP地址由网络地址(确定网络)和主机地址(网络中的主机)组成。

 本地回环地址:127.0.0.1  主机名:localhost 。


 端口号 :用于标识进程的逻辑地址,不同进程的标识 。

 有效端口:0~65535,其中0~1024系统使用或保留端口。 

常用端口:

1) web服务端口:80

2) tomcat服务器端口:8080


传输协议:通讯的规则 

常见协议:TCP,UDP


           网络通信的两种协议:


在Java中网络程序有两种协议:TCP和UDP,TCP通过握手协议进行可靠的连接


UDP:

      1) 将数据及源和目的封装成数据包中,不需要建立连接
            2)每个数据报的大小在限制在64k内
            3)因无连接,是不可靠协议
            4)不需要建立连接,速度快
            
      TCP:    

       1)建立连接,形成传输数据的通道
             2)在连接中形成大数据量传输
             3)通过三次握手完成连接,是可靠协议
             4)必须建立连接,效率会稍低


Socket:


1)Socket就是为网络服务提供的一种机制。


2)通信的两端都有Socket。


3)网络通信其实就是Socket。


4)数据在两个Socket间通过IO传输。

 

     UDP传输步骤:


1,建立updsocket服务。
2,提供数据,并将数据封装到数据包中。
3,通过socket服务的发送功能,将数据包发出去。
4,关闭资源。


Java练习代码:

练习:通过键盘录入获取要发送的信息

class  UdpSend2{public static void main(String[] args) throws Exception{//1,创建udp socket,建立端点。DatagramSocket ds = new DatagramSocket();// 通过带缓冲区的字符流实现键盘录入BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));        //初始化line为nullString line = null;//循环读取键盘录入的内容while((line=bufr.readLine())!=null){ //定义一个标记,退出循环if("886".equals(line))break;            //2,定义数据包。用于存储数据。byte[] buf = line.getBytes();,            DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10001);// 3,通过socket服务,将已有的数据包发送出去。通过send方法。ds.send(dp);}ds.close();//4,关闭资源}}class  UdpRece2{public static void main(String[] args) throws Exception{// 1,创建udp socket,建立端点。DatagramSocket ds = new DatagramSocket(10001);while(true){//2,定义数据包。用于存储数据。byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf,buf.length);//3,通过服务的receive方法将收到数据存入数据包中。ds.receive(dp);//阻塞式方法//4,通过数据包的方法获取其中的数据。String ip = dp.getAddress().getHostAddress();String data = new String(dp.getData(),0,dp.getLength());System.out.println(ip+"::"+data);}}}


TCP传输方式:

 

服务端:


1,建立服务端的socket服务。ServerSocket();并监听一个端口。


2,获取连接过来的客户端对象。通过ServerSokcet的 accept方法。没有连接就会等,所以这个方法阻塞式的。


3,客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。并打印在控制台。


4,关闭服务端。(可选)


Java练习代码:

练习:TCP传输

class  TransClient{public static void main(String[] args) throws Exception{Socket s = new Socket("192.168.1.254",10005);//定义读取键盘数据的流对象。BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//定义目的,将数据写入到socket输出流。发给服务端。//BufferedWriter bufOut =      //new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));//使用PrintWriter将数据发送给服务端。PrintWriter out = new PrintWriter(s.getOutputStream(),true);//定义一个socket读取流,读取服务端返回的大写信息。BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));String line = null;while((line=bufr.readLine())!=null){if("over".equals(line))break;out.println(line);//通过PrintWriter方法实现发送/*//通过BufferedWriter方法实现发送 bufOut.write(line); bufOut.newLine(); bufOut.flush();            */String str =bufIn.readLine();System.out.println("server:"+str);}//关闭资源bufr.close();s.close();}}class  TransServer{public static void main(String[] args) throws Exception{ServerSocket ss = new ServerSocket(10005);// 建立服务端socket服务。并监听一个端口。Socket s = ss.accept();String ip = s.getInetAddress().getHostAddress();System.out.println(ip+"....connected");//读取socket读取流中的数据。BufferedReader bufIn =new BufferedReader(new InputStreamReader(s.getInputStream()));//目的。socket输出流。将大写数据写入到socket输出流,并发送给客户端。//BufferedWriter bufOut = //new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));PrintWriter out = new PrintWriter(s.getOutputStream(),true);String line = null;while((line=bufIn.readLine())!=null){System.out.println(line);//通过PrintWriter方法实现发送out.println(line.toUpperCase());/*//通过BufferedWriter方法实现发送 bufOut.write(line.toUpperCase()); bufOut.newLine(); bufOut.flush();*/}//关闭资源s.close();ss.close();}}

URL和URI:

URI:统一资源标识符,用于标识一个web资源,包含了两个部分。

URL:统一资源定位符,能够精确的定位数据的URI。

URN:统一资源名称,除了URL的URI。

在java中URI和URL是分开的两个类,URI类专门用于解析,URL用于通信。


 1) String getFile() :获取此 URL 的文件名。 
       2)String getHost() :获取此 URL 的主机名(如果适用)。 
      3) String getPath() : 获取此 URL 的路径部分。 
      4) int getPort() :获取此 URL 的端口号。 
      5) String getProtocol() : 获取此 URL 的协议名称。 
      6) String getQuery() :获取此 URL 的查询部 



知识点:网络架构:

   C/S:Client/Server
客户端,服务端。
特点:
1,需要在客户端和服务端都需要按照编写的软件。
2,维护较麻烦。
好处:可以减轻服务端的压力,如网络游戏。

B/S:Browser/Server
浏览器 ,服务端。
1,客户端不用单独编写软件。因为客户端用的就是浏览器。
2,对于软件升级,只要考虑服务端即可。
弊端:所有的程序都运行在服务端,客户端的浏览器毕竟解析能力较弱。对游戏等。


















































0 0