您的位置:首页 > 理论基础 > 计算机网络

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

2015-06-15 22:37 627 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
1.网络通信概述

1>网络模型:OSI参考模型和TCP/IP参考模型

2>网络通信要素:IP地址;端口号;传输协议

3>网络通信:

a>找到对方IP

b>数据发送到对方指定的应用程序上需要端口(0-65535其中0-1024系统使用保留)。

c>定义通信规则,即协议。如:TCP/IP

4>IP地址

网络中设备标示。本地回环地址:127.0.0.1主机名:localhost

5>UDP和TCP

a>UDP

1)将数据及源和目的封装到数据包中,不需要建立连接

2)每个数据包的大小限制在64k

3)不可靠协议

4)不需要建立连接,速度快

5) 

b>TCP

1)建立连接,形成传输数据的通道。

2)在连接中进行大数据量传输

3)通过三次握手完成连接,是可靠协议

4)必须建立连接,效率会稍低

6>Socket

a>Socket是为网络服务提供的一种机制

b>通信的两端都有Socket

d>网络通信其实就是Socket间的通信

e>数据在两个Socket间通过IO传输

2.UDP通信

1>UDP发送端

DatagramSocket:发送和接收数据报包的套接字。

DatagramPacket:表示数据报包。

UDP将一段文字发送出去的步骤:

a>建立updSocket服务。通过DatagramSocket对象

b>提供数据,并将数据封装到数据包中。通过DatagramPacket对象

c>通过Socket服务的发送功能,将数据包发送出去。send()

d>关闭资源

 

class UDPSend

{

       public static void main(String []args)throws Exception

       {

              //建立UDP服务

              DatagramSocketds = new DatagramSocket();

              //提供发送的数据

              byte[] buf = "UDP Send Data".getBytes();

              //将发送的数据封装到数据包

              DatagramPacketdp = new DatagramPacket(buf,buf.length,

                                                        InetAddress.getByName("127.0.0.1"),10000);

              ds.send(dp);//发送数据

              ds.close();//关资源

       }

}

2>UDP接收端

接收UDP协议传输的数据并处理:

a>定义udpsocket服务。通常会监听一个端口,给接收程序定义数字标识

b>定义一个数据包,因为要存储接收到的字节数据。数据包对象中有更多的功能可以提取字节数据中的不同数据信息

c>通过Socket服务的receive方法将接收到的数据存入已定义好的数据包中

d>通过数据包对象的特有功能,将这些不同的数据取出。

e>关闭资源

 

class UDPRec

{

       public static void main(String []args)throws Exception

       {    

              //建立UDP服务

              DatagramSocketds = new DatagramSocket(10000);

              //定义一个接受数据的缓冲区

              byte[] buf = new byte[1024];

              //定义一个接收数据的数据包

              DatagramPacketdp = new DatagramPacket(buf,buf.length);

             

              ds.receive(dp);//接收数据到包中,阻塞式方法

              Stringip = dp.getAddress().getHostAddress();//通过数据包对象获取ip值

              //通过数据包对象获取数据

              Stringdata = new String(dp.getData(),0,dp.getLength());

              intport = dp.getPort();//通过数据包对象获取端口

             

              System.out.println(ip+data+port);//输出

       }

}

3.TCP通信

1>TCP分为客户端和服务端;

  客户端对应的对象是Socket,服务端对应的对象是ServerSocket。

2>客户端

Socket该对象在建立时,就可以去连接指定主机。因为tcp是面向连接的,所以在建立Socket服务时,就要有服务端存在,并连接成功。形成通路后,在该通道进行数据的传输。

步骤:a>创建Socket服务,并指定要连接的主机和端口。

  b>如果连接建立成功,说明数据传输通道已建立好。该通道为Socket流,该流有输入,又有输出。要想获取输入或输出流对象可以Socket通过getOutputStream()和getInputStream()来获取。

  c>使用输出流将数据写入

  d>关闭资源

public classClientDemo2 {

       public static void main(String[] args)throws UnknownHostException, IOException {

              //客户端发数据到服务端

              Socketsocket = new Socket("192.168.1.100",10002);

              OutputStreamout = socket.getOutputStream();  

              out.write("tcp演示:哥们又来了!".getBytes());

              //读取服务端返回的数据,使用socket读取流。

              InputStreamin = socket.getInputStream();

              byte[]buf = new byte[1024];

              intlen = in.read(buf);

              String  text = new String(buf,0,len);

              System.out.println(text);

              //关闭资源。

              socket.close();      

       }

}

 

3>服务端

步骤:a>建立服务端的Socket服务。ServerSocket(),并监听一个端口。

  b>获取连接过来的客户端对象,通过ServerSocket的accept()方法。没有连接就会等待,此方法是阻塞式的。

  c>客户端如果发来数据,那么服务端要使用对应的客户对象,并获取到该客户端对象的读取流来读取过来的数据

  d>关闭客户端,关闭服务(可选)。

public classServerDemo2 {

       public static void main(String[] args)throws IOException {

//           
服务端接收客户端发送过来的数据,并打印在控制台上。

              //1创建服务端对象。

              ServerSocketss = new ServerSocket(10002);

              //2,获取连接过来的客户端对象。

              Sockets = ss.accept();

              Stringip = s.getInetAddress().getHostAddress();

              //3,通过socket对象获取输入流,要读取客户端发来的数据

              InputStreamin = s.getInputStream();

              byte[]buf = new byte[1024];

              intlen = in.read(buf);

              Stringtext = new String(buf,0,len);

              System.out.println(ip+":"+text);

              //使用客户端socket对象的输出流给客户端返回数据

              OutputStreamout = s.getOutputStream();

              out.write("收到".getBytes());

              s.close();

              ss.close();     

       }

}

4.URL和URLConnection类

1>类 URL
代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。

2>URLConnection

抽象类 URLConnection,
它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL
引用的资源。

创建一个到 URL
的连接需要几个步骤:

a>通过在 URL
上调用 openConnection 方法创建连接URL所引用的远程对象。

b>处理设置参数和一般请求属性。

c>使用 connect
方法建立到远程对象的实际连接。

d>远程对象变为可用。远程对象的头字段和内容变为可访问。

 

classURLConnectionDemo

{

       public static void main(String[]args)throws Exception

       {

              URLurl = new URL("http://www.baidu.com/");

              URLConnectionconn = url.openConnection();

              System.out.println(conn);

 

              InputStreamin = conn.getInputStream();

 

              byte[]buf = new byte[1024*1024*10];

              intlen = in.read(buf);

              System.out.println(newString(buf,0,len));

       }

}

5.域名解析

1>概述:将主机名翻译成IP地址。

2>解析步骤

本地输入主机名------>DSN服务器------>通过DSN获得IP地址------>通过IP地址获取对应主机
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: