黑马程序员--网络编程

------- android培训java培训、期待与您交流! ----------


IP地址:
      在互联网上的每台计算机都有一个唯一的标记,这个标记就是IP地址。IP地址使用32位的二进制数据表示,一般实际中看到的IP地址都是以十进制的形式表示的。IP地址的格式为:IP地址=网络地址+主机地址  。IP地址分为五类,A类1.0.0.1~~~~126.255.255.254保留给政府机构。B类128.0.0.1~~~~191.255.255.254分配给中的规模公司。C类
192.0.0.1~~~~~223.255.255.254分配给需要的任何人。D类224.0.0.1~~~~239.255.255.254用于组播,E类240.0.0.1~~~~255.255.255.254用于实验。
InetAddress:
     这个类主要表示IP地址,他分别有两个子类:Inet4Address,Inet6Address,分别表示IPV4和IPV6协议。

import java.new .InetAddress;
public class InetAddress{
  public static void main (String[] args) throws Exception{
     InetAddess loc = null;
    InetAddess rem = null;
    loc = InetAddess.getLocalHost();//得到本地InetAddress对象
     rem = InetAddess.getByName(www.baidu.com);//取得远程的InetAddress对象
     System.out.println("本机IP地址:"+loc.getHostAddress);
    System.out.println("百度IP地址:"+rem.getHostAddress);
}
}

基于TCP/IP协议Socket通信
  TCP/IP(Transmission Control Protocol传输控制协议/Internet Protocol网间协议)
  1,是Internet的主要协议,定义了计算机和外设进行通信所使用的规则;TCP/IP网络参考模型包括五个层次:应用层、传输层、网络层、链路层、物理层。
  2,网络通讯中数据传输的模式:
        面向连接(TCP)------打电话
       无连接(UDP,User Datagram Protocol)---发邮件、短信
3,套接字Socket
      网络中双向通讯中的某一端称为一个Socket
     在Java中分为客户端套接字Socket类和服务器端套接字ServerSocket类
4,Socket通讯的基本原理
       Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket,从而也就使得这段信息能传送     到其他程序中。
      通讯的主要过程包括:Socket的建立、监听、连接、发送数据和接收数据等环节。
 5,端口号
    主要是区分服务类别(服务器端所提供的功能)——如:WWW:80、telnet:21、ftp: 23、smtp:25、pop3:110等。
    在同一时间内所进行的多个不同的网络会话
    端口号是一个16位无符号整数,范围是0-65535,以区别主机上的每一个程序(端口号就像房屋中的房间号);
低于256的短口号保留给标准应用程序,比如pop3的端口号就是110,每一个套接字都组合进了IP地址、端口号,这样形成的整体就可以区别每一个套接字。

Socket通讯实现中客户/服务器端双方的程序
通讯的方式:“一对一”(一个服务器对应一个客户机);“一对多”(一个服务器对应多个连接的客户机);
 Java的基于TCP的网络编程非常简单化,不再需要考虑底层的网络TCP/IP协议等复杂的编程实现细节。     只需要按照通过 Socket获得输入输出流对象,再用标准的 I/O 流的数据读写进行数据传送和接受
Socket通讯的编程步骤   :
根据程序的身份分别创建出客户端和服务器端套接字以联通。
双方利用Socket类中的getInputStream()、getOutputStream()得到对应的输入输出流。
双方读写数据(输入输出)。
关闭Socket及ServerSocket流(应先关闭输入输出流)。

*****************************************************************TCP程序练习**********************************************************************************
服务器端:
import java.net.*;
import java.io.*;
public class HelloServer{
   public static void main(String args[]) throws Exception{
    ServerSocket server = null ;     //声明serversocket对象
    Socket client = null; //一个socket就是一个客户端
   PrintStream out = null ;
   server = new ServerSocket(8888);//服务器在8888端口上等待客户端访问
   System.out.println("服务器运行,等待连接");
   client = server.accept();
   String str = "hello world";
   out = new PrintStream(client.getOutputStream());
   out.println(str);
   out.close();
   client.close();
   server.close();
}
}
客户端:
import java.net.*;
import java.io.*;
public class HelloClient{
  public static void main(String args[]) throws Exception{
    Socket client = null; //声明Socket对象
   client  = new Socket("localhost",8888);
  BufferedReader buf = null; //声明BufferedReader对象
   buf = new BufferedReader(
     new InputStreamReader(
     client.getInputStream()));  //取得客户端的输入流
   String str = buf.readLine();
    System.out.println("服务器端输出内容:"+str);
   client.close();
   buf.close();

 }

}

UDP简介
  在TCP的所有操作都必须建立可靠的连接,但一定会浪费大量的系统性能,在UDP中,他是不可靠的连接,在各种聊天工具中被广泛应用。
  在UDP开发中用DatagramSocket包装一条要发送的信息.

UDP客户端
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
 public class UDPClient{
  public static void main(String[] args) throws Exception{
    DatagramSocket ds = null;//声明DatagramSocket对象;
    byte[] buf = new byte[1024];
    DatagramPacket dp = null;//声明DatagramPacket对象;
    ds = new DatagramSocket(9000);//定义客户端的端口
    dp = new DatagramPacket(buf,1024);
    System.out.println("等待接收数据");
    ds.receive(dp);
    //接收数据
    String str = new String(dp.getDate(),0,dp.getlength())+ "from" + dp.getAddress().getHostAddress() + ":" + dp.getPort();
    System.out.println(str);
    ds.close();
  }
 }

UDP服务器端
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.new.InetAddress;
public class UDPServer{
  public static void main(String[] args) throws Exception{
   DatagramSocket ds = null;
   DategramPacket dp = null;
   ds = new DatagramSocket(3000);
   String str = "hello world";
   //指定数据内容,长度,发送目标地址,端口
   dp = new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("localhost"),9000);
   System.out.println("发送信息");
   ds.send(dp);
   ds.close();
  }
}



































------- android培训java培训、期待与您交流! ----------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值