现在的位置: 首页 > 综合 > 正文

黑马程序员_网络编程1

2013年10月12日 ⁄ 综合 ⁄ 共 7762字 ⁄ 字号 评论关闭

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

1.UDP相关类:

1) DatagramSocket:

构造器:DatagramSocket() 构造数据报套接字并将其绑定到本地主机上任何可用的端口。

DatagramSocket(int port) 创建数据报套接字并将其绑定到本地主机上的指定端口。

一般常用这两个构造方法。

基本方法:void setSoTimeout(int timeout) 启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。 

void receive(DatagramPacket p) 从此套接字接收数据报包。 

void send(DatagramPacket p) 从此套接字发送数据报包。 

(2)DatagramPacket

基本构造器:

DatagramPacket(byte[] buf, int length) 

           构造 DatagramPacket,用来接收长度为 length 的数据包。 

DatagramPacket(byte[] buf, int length, InetAddress address, int port) 

          构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。

基本方法:

 InetAddress getAddress()    此数据报将要发往该机器或者是从该机器接收到的IP。 

 byte[] getData()            返回数据缓冲区。 

 int getLength()             返回将要发送或接收到的数据的长度。  

 int getPort()               此数据报将要发往该主机或者是从该主机接收到的端口号。 

 void setAddress(InetAddress iaddr)   设置要将此数据报发往的那台机器的 IP 地址。 

 void setData(byte[] buf)    为此包设置数据缓冲区。 

 void setData(byte[] buf, int offset, int length)   为此包设置数据缓冲区。 

 void setLength(int length)  为此包设置长度。 

 void setPort(int iport)   设置要将此数据报发往的远程主机上的端口号。  

2.InetAddress类基本应用:

        InetAddress ia = InetAddress.getLocalHost();

System.out.println(ia.getHostAddress());

System.out.println(ia.getHostName());

InetAddress ia2 = InetAddress.getByName("10.21.51.25");

System.out.println(ia2.getHostAddress());

        // 若由IP解析不成功,则返回IP地址           

        System.out.println(ia2.getHostName());

3.UDP发送接收基本程序:

  发送端:

       class  UdpSend{

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

DatagramSocket ds = new DatagramSocket(8888);

byte[] buf = "udp ge men lai le ".getBytes();

DatagramPacket dp = New DatagramPacket(buf,buf.length,

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

ds.send(dp);

ds.close(); }}

 接收端:

        class  UdpRece{

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

          DatagramSocket ds = new DatagramSocket(10000);

       while(true){

           byte[] buf = new byte[1024];

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

              ds.receive(dp);//阻塞式方法。

            String ip = dp.getAddress().getHostAddress();

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

             int port = dp.getPort();

             System.out.println(ip+"::"+data+"::"+port);}

ds.close(); }}

4.UDP 聊天小应用:

/*

编写一个聊天程序。

有收数据的部分,和发数据的部分。

这两部分需要同时执行。

那就需要用到多线程技术。

一个线程控制收,一个线程控制发。

因为收和发动作是不一致的,所以要定义两个run方法。

而且这两个方法要封装到不同的类中。

第二次运行要修改端口

*/

import java.io.*;

import java.net.*;

class Send implements Runnable{

private DatagramSocket ds;

public Send(DatagramSocket ds){

this.ds = ds;}

public void run(){

try{

BufferedReader bufr = 

                new BufferedReader(new InputStreamReader(System.in));

String line = null;

while((line=bufr.readLine())!=null){

     byte[] buf = line.getBytes();

DatagramPacket dp =  new DatagramPacket(buf,

          buf.length,InetAddress.getByName("192.168.1.255"),10002);

ds.send(dp);

if("886".equals(line))

break;}

}catch (Exception e){

throw new RuntimeException("发送端失败");}}}

class Rece implements Runnable{

private DatagramSocket ds;

public Rece(DatagramSocket ds){

this.ds = ds;}

public void run(){

try{

while(true){

byte[] buf = new byte[1024];

DatagramPacket dp =

                           new DatagramPacket(buf,buf.length);

ds.receive(dp);

String ip = dp.getAddress().getHostAddress();

String data = 

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

if("886".equals(data)){

System.out.println(ip+"....离开聊天室");

break;}

System.out.println(ip+":"+data);}}

catch (Exception e){

throw new RuntimeException("接收端失败");}}}

public class  ChatDemo{

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

DatagramSocket sendSocket = new DatagramSocket();

DatagramSocket receSocket = new DatagramSocket(10002);

new Thread(new Send(sendSocket)).start();

new Thread(new Rece(receSocket)).start();}}

5.TCP相关类:

1SocketAddress类无方法,只有无参构造器。他的子类InetSocketAddress封装了IP 地址 端口号,它还可以是一个对(主机名 端口号),在此情况下,将尝试解析主机名。如果解析失败,则该地址将被视为未解析地址。

InetSocketAddress类:

全部构造器:

InetSocketAddress(InetAddress addr, int port)      根据 IP 地址和端口号创建套接字地址。 

InetSocketAddress(int port)  创建套接字地址,其中 IP 地址为通配符地址,端口号为指定值。 

InetSocketAddress(String hostname, int port)  根据主机名和端口号创建套接字地址。

常用方法:

 boolean equals(Object obj)    将此对象与指定对象比较。 

 InetAddress getAddress()     获取 InetAddress。 

 String getHostName()        获取 hostname。 

 int getPort()                获取端口号。 

 int hashCode()             返回此套接字地址的哈希码。 

 String toString()            构造此 InetSocketAddress 的字符串表示形式。 

2)客户端Socket

常用构造器:

Socket()可以通过 connect(SocketAddress endpoint)将此套接字连接到服务器。

Socket(InetAddress address, int port) 

          创建一个流套接字并将其连接到指定 IP 地址的指定端口号。 

Socket(String host, int port) 

          创建一个流套接字并将其连接到指定主机上的指定端口号。

常用方法:

 void close()                       关闭此套接字。 

 InputStream getInputStream()    返回此套接字的输入流 

 OutputStream getOutputStream()  返回此套接字的输出流。 

 InetAddress getLocalAddress()   获取套接字绑定的本地地址。 

 int getLocalPort()                返回此套接字绑定到的本地端口。 

 InetAddress getInetAddress()    返回套接字连接的地址。 

 int getPort()                      返回此套接字连接到的远程端口。 

 void setSoTimeout(int timeout) 

         启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。 

 void shutdownInput()             此套接字的输入流置于“流的末尾”。 

 void shutdownOutput()      关闭此套接字的输出流,并向对方发送关闭信息。 

 String toString()           将此套接字转换为 String

3)服务端:ServerSocket

常用构造器:

ServerSocket(int port, int backlog) 

                Backlog 同时连接到服务器的客户端最大数。

ServerSocket(int port)   创建绑定到特定端口的服务器套接字。

常用方法:

Socket accept()      侦听并接受到此套接字的连接。 

void close()          关闭此套接字

4)简单示例:

客户端:

       public class TCPTestClient {

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

     Socket s=new Socket("10.21.51.20", 10009);

     OutputStream os=s.getOutputStream();

     os.write("ge men wo lai le".getBytes());

     os.flush();

     s.close();}}

服务器端:

     public class TCPTestServer {

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

   ServerSocket ss=new ServerSocket(10009);

   Socket s=ss.accept();

   InputStream is=s.getInputStream();

   byte[] buf=new byte[1024];

   int len=is.read(buf);

   System.out.println(new String(buf,0,len));

   s.close();

   ss.close();}}

6.URL类:

常用构造器:URL(String spec)    根据 String 表示形式创建 URL 对象

常用方法:

 String getFile()       获取此 URL 的文件名。 

 String getHost()       获取此 URL 的主机名(如果适用)。 

 String getPath()       获取此 URL 的路径部分。 

 int getPort()           获取此 URL 的端口号。 

 String getProtocol()  获取此 URL 的协议名称。 

 String getQuery()      获取此 URL 的查询部 

 URLConnection openConnection() 

          返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。

 InputStream openStream()   相当于openConnection().getInputStream()。

         

示例:

URL url =

new  URL("http://192.168.1.254/myweb/demo.html?name=haha&age=30");

System.out.println("getProtocol() :"+url.getProtocol());

System.out.println("getHost() :"+url.getHost());

System.out.println("getPort() :"+url.getPort());

System.out.println("getPath() :"+url.getPath());

System.out.println("getFile() :"+url.getFile());

System.out.println("getQuery() :"+url.getQuery());

输出:

getProtocol() :http

getHost() :192.168.1.254

getPort() :-1

getPath() :/myweb/demo.html

getFile() :/myweb/demo.html?name=haha&age=30

getQuery() :name=haha&age=30

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

构造器:protected  URLConnection(URL url)  构造一个到指定URL的未创建的连接。

常用方法:

abstract  void connect()  打开到此URL引用的资源的通信链接(如果尚未建立这样的连接)。 

InputStream getInputStream()     返回从此打开的连接读取的输入流。 

OutputStream getOutputStream()  返回写入到此连接的输出流。 

URL getURL()                返回此 URLConnection 的 URL 字段的值。 

String toString()               返回此 URL 连接的 String 表示形式。

示例: 

  URL url = new URL("http://192.168.1.254:8080/myweb/demo.html");

  URLConnection conn = url.openConnection();

  System.out.println(conn);

  InputStream in = conn.getInputStream();

  byte[] buf = new byte[1024];

  int len = in.read(buf);

  System.out.println(new String(buf,0,len));

8.本机DNS映射配置文件位置:C:\WINDOWS\system32\drivers\etc\hosts



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

详细请查看:http://edu.csdn.net/heima

抱歉!评论已关闭.