黑马程序员_java 网络编程

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! 

----------------------


1.UDP与TCP的特点

    UDP的特点:(UDP实例:网络聊天,视频会议)

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

       2.每个数据报的大小限制在64K内;

       3.因为无连接,是不可靠协议;

       4.不需要连接,传输速度快。

    TCP的特点:(TCP实例:打电话)

       1.建立连接,形成传输数据的通道;

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

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

       4.必须建立连接,传输效率低。

2.UDP传输

UDP发送流程

    1.建立UDP socket服务;

    2.提供数据并将数据封装到数据包中;

    3.通过socket服务的发送功能将数据发送出去;

    4.关闭资源

import  java.net.*;

public class Test3 {

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

     //创建socket服务

     DatagramSocketds=new DatagramSocket();

     //提供数据并将数据封装到数据包中

     byte[] buf=" ".getBytes();

     DatagramPacketdp=new DatagramPacket(buf,buf.length,InetAddress.getByName(""),88);

     //将数据发送出去

     ds.send(dp);

     //关闭资源

     ds.close();

  }

}

    UDP接收流程:

       1.定义UDPsocket服务并监听一个端口。方便于明确哪些数据过来该应用程序可以处理;

       2.定义一个数据包,因为要存储接收到的字节数据;

       3.通过socket服务的receive方法将收到的数据存入已经定义好的数据包中;

       4.通过数据包对象的特有功能将这些不同的数据取出;

       5.关闭资源。

import  java.net.*;

public class Test3 {

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

     //创建socket服务

     DatagramSocket ds=new DatagramSocket(88);

     //定义数据包,存储数据

     byte[] buf=new byte[1024];

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

     //通过服务的receive方法将收到的数据存入数据包中

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

     //通过数据包的方法获取其中的数据

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

     String data=newString(dp.getData(),0,buf.length);

     int port=dp.getPort();

     //关闭资源

     ds.close();

  }

}

3.TCP传输

通过查阅socket对象,发现在该对象建立时就可以去连接固定的主机。因为TCP是面向连接的,所以在建立socket服务时就要有客户端存在,并连接成功。形成通路后,在该通道进行数据的传输。

    客户端建立步骤:

       1.创建Socket服务,并指定要连接的主机和端口;

       2. 获取Socket流中的输出流来发送数据;

       3.关闭资源。

       import java.io.*;

import java.net.*;

public class Test4 {

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

       //创建客户端服务并指定主机和端口

       Socket s=new Socket("192.168.1.1",100);

       //获取Socket流中的输出流来发送数据

       OutputStreamout=s.getOutputStream();

       out.write("data".getBytes());

       s.close();

    }

}

    服务端建立步骤:

       1.建立服务端的Socket服务,运用ServerSocket并监听一个端口;

       2.获取连接过来的客户端对象,通过ServerSocket的accept方法(阻塞式方法);

       3.客户端发送数据,那么服务端就要使用对应的客户端对象,并获取客户端对象的读取流来读取发过来的数据;

       4.关闭服务(可选)

              import java.io.*;

import java.net.*;

public class Test4 {

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

       //建立服务端socket服务。并监听一个端口。

       ServerSocketss = new ServerSocket(100);

       //通过accept方法获取连接过来的客户端对象。

       while(true)

       {

           Socket s= ss.accept();

           String ip= s.getInetAddress().getHostAddress();

           System.out.println(ip+".....连接");

           //获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据。

           InputStreamin = s.getInputStream();

           byte[] buf = new byte[1024];

           int len =in.read(buf);

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

           s.close();//关闭客户端.

       }

    }

}

4.练习

    需求:建立一个文本转换服务器。

客户端给服务端发送文本,服务单会将文本转成大写在返回给客户端。

而且客户度可以不断的进行文本转换。当客户端输入over时,转换结束。

思路:

1.建立服务;

2.获取键盘录入;

3.将数据发给服务端;

4.后去服务端返回的大写数据;

5.结束,关资源。

该例子出现的问题。

现象:客户端和服务端都在莫名的等待。

因为客户端和服务端都有阻塞式方法。这些方法么没有读到结束标记。那么就一直等而导致两端,都在等待。

注意:运用读取流、写入流时要刷新;readLine()方法读取到回车键后才返回数据,所以要有换行标记运用newLine()方法.

5.结束标记

    shutdownOutput();关闭客户端的输出流,相当于给流中加入一个结束标记-1;

    shutdownInput();

6.URL

    String getFile()

          获取此 URL 的文件名。

    String getHost()

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

    String getPath()

          获取此 URL 的路径部分。

    int getPort()

          获取此 URL 的端口号。

 String getProtocol()

          获取此 URL 的协议名称。

 String getQuery()

          获取此 URL 的查询部


---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! 
----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值