Java学习笔记(七、网络编程基础)

10.1 java网络编程基础
10.1.1 IP地址和InetAddress类
1、TCP/IP协议和IP地址
    TCP是一种传输控制协议,IP是一种网际协议。
    TCP/IP分为4个层次:网络接口层,负责接受和发送物理帧;网络层,负责相邻节点之间的通信;传输层,负责起点到终点的通信;应用层,提供诸如文件传输、电子邮件等应用程序。
2、InetAddress类
    java.net包这你哦个有InetAddress类的定义,InetAddress类的对象用于存储IP地址和域名,该类提供以下方法:
(1)getByName(String s),获得一个InetAddress对象,含有主机的IP地址和域名。
(2)String getHostName(),获取InetAddress对象的域名。
(3)String getHostAddress(),获取InetAddress对象的IP地址。
(4)getLocalHost(),获得一个InetAddress对象,包含本地机的域名和IP地址。
10.1.2 同一资源定位符URL
    是www客户机访问Internet时用来标识资源的名字和地址的。URL的格式是:
                        <METHOD>://<HOSTNAME:PORT>/<PATH>/<FILE>
其中METHOD是传输协议;HOSTNAME是文档和服务器所在Internet主机名;PORT是服务端口号;PATH是路径名;FILE是文件名。
1、URL类
    java.net包中有URL类,利用URL对象能实现Internet寻址、网络资源的定位连接,在客户机与服务器之间直接访问等。
2、URLConnection类
    要接收和发送信息还需要用URLConnection类,程序获得一个URLConnection对象,相当于完成对指定URL的一个HTTP连接。例如
URL mu=new URL("http://www.sun.com");//先要创建一个URL对象
URLConnection muc=mu.openConnection();//获得URLConnection对象
3、信息的发送与接收
    发送和接收信息要获得流对象,并由流对象创建输入或输出数据流对象。然后就可以用流的方法访问网上资源。
例如,下面是以数据流方式读取网页内容的应用程序。

  1. import java.net.*;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import java.io.*;
  5. import javax.swing.*;
  6. public class Example{
  7. public static void main(String args[]){
  8.  new DownNetFile();
  9. }
  10. }
  11. class DownNetFile extends JFrame implements ActionListener{
  12. JTextFiled inFiled = new JTextFiled(30);
  13. JTextArea showArea = new JTextArea();
  14. JButton b = new JButton("下载");
  15. JPanel p =new JPanel();
  16. DownNetFile(){
  17. super("读取网络文本文件示意程序");
  18. Container con = this.getContentPane();
  19. p.add(inFiled);
  20. p.add(b);
  21. JScrollPane jsp=new JscrollPane(showArea);
  22. b.addActionListener(this);
  23. con.add(p,"North");
  24. con.add(p,"Center");
  25. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  26. setSize(500,400);
  27. setVisible(true);
  28. }
  29. public void actionPerformed(ActionEvent e){
  30. readByURL(inFiled.getText());
  31. }
  32. public void readByURL(String urlName){
  33. try{
  34. URL url = new URL(urlName);
  35. URLConnection tc = url.openConnection();
  36. tc.connect();
  37. InputStreamReader in = new InputStreamReader(tc.getInputStream());
  38. BufferedReader dis = new BufferedReader(in);
  39. String inLine;
  40. while((inLine = dis.readLine())!=null){
  41. showArea.append(inLine + "/n");
  42. }
  43. dis.close();
  44. }catch(MalformedURLException e1){
  45. }catch(IOException e2){
  46. }
  47. }
  48. }

10.1.3 客户机/服务器模式
    网络应用模式主要有:主机/终端模式、集中计算、集中管理;客户机/服务器模式、分布计算、分布管理;浏览器/服务器模式。
    在客户机/服务器模式中,在server端,要准备接收多个client端计算机的通信。为此,除用IP地址标识Internet上的计算机外,另还引入端口号,用端口号标识正在server端后台服务的线程。端口号与IP地址的组合成为网络套接字socket。
    java语言在实现c/s模式中,套接字分为两个类:在server端,ServerSocket类支持底层的网络通信;在client端,Socket类至此回网络底层通信。server机通过端口提供面向client机的服务;server机在它的几个不同端口分别同时提供几种不同的服务。client接入server的某一端口,通过这个端口提请server机为其服务。规定:端口号0~1023供系统专用。端口号1024~65535供应用程序使用。
    双方实现通信有流式socket和数据报式socket两种。
    流式socket是有连接的通信,即tcp。每次通信钱建立连接,通信结束后断开连接。特点是可以保证传输的正确性、可靠性。
    数据报式socket是无连接的通信,即udp,将欲传输的数据分成小包,直接上网发送。无需建立连接和拆除连接,速度快,但无可靠保证。
    流式socket在client程序和server程序间建立连接通信的通道。每个socket可以进行读写两种操作。对任一端,与对方的通信会话过程是:建立socket连接,获得输入/输出流,读数据/写数据,通信完成后关闭socket。
    利用Socket的构造方法,可以在客户端建立到服务器的套接字对象爱:Scoket mySocket = new Socket("http://fudan.ecu.cn",1860);
然后,用getInputStream方法获得输入流,用这个输入流读取服务器放入“线路”的信息;用getOutputStream方法获得输出流,用这个流将信息写入“线路”。
    利用ServerSocket构造方法,可以在服务器端建立接收客户端套接字的服务器套接字对象:ServerSocket(int port),指定端口号,创建一个ServerSocket对象,端口号要和客户端呼叫的款口号相同。
服务器端程序在指定的端口监听,当收到Client陈旭发出的服务请求时,创建一个套接字对象与该端口对应的Client程序通信。
例如,

  1. public class Client{
  2.     public static void main(String args[]){
  3.         String s=null;
  4.         Scoket myScoket;
  5.         DataInputStream in = null;
  6.         DataOutputStream out = null;
  7.         try{
  8.                 myScoket = new Scoket("localhost",4441);
  9.                 in = new DataOutputStream(myScoket.getInputStream());
  10.                 out = new DataOutputStream(myScoket.getOutputStream());
  11.                 out.writeUTF("server,hello");
  12.                 while(true){
  13.                     s = in.readUTF();
  14.                     if(s==null){
  15.                         break;
  16.                     }else {
  17.                         System.out.println(s);
  18.                     }
  19.                 }
  20.                 mySocket.close();
  21.         }catch(IOException e){
  22.            }
  23.     }
  24. }
  25. public class Server{
  26.     ServerSocket server = null;
  27.     Socket you =null;
  28.     String s = null;
  29.     DataInputStream in = null;
  30.     DataOutputStream out = null;
  31.     try{
  32.             server = new ServerSocket(4441);
  33.         }catch(IOException e){
  34.             }
  35.     try{
  36.             you = server.accept();
  37.             in = new DataInputStream(you.getInputStream());
  38.             out = new DataOutputStream(you.getOutputStream());
  39.             while(true){
  40.                 s=in.readUTF();
  41.                 if(s!=nullbreak;
  42.             }
  43.             out.writeUTF("hello,client,I'm a sever");
  44.             out.close()
  45.     }catch(IOException e1){
  46.    }
  47. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值