黑马程序员--java网络

------- android培训java培训、期待与您交流! ----------1.java中有两种网络协议:TCP协议和UDP协议。2。这两种有什么区别呢?问:TCP和UDP有什么区别:答:一,TCP协议:属于可靠的连接,在发送数据报之前建立连接,采用三次握手原则,可以保证数据能够完整的传输到目的地,因而传输速度也会比较慢。二, UDP协议:属于不可靠的连接,发送数据包之前不会建立连接,不会保证数据报到没到达目的地。(1)UDP: a、将数据及源和目的封装成数据包,不需要建立连接 b、每个数据包的大小限制在64K内 c、因无连接,是不可靠协议 d、不需要建立连接,速度快(2)TCP: a、建立连接,形成传输数据的通道 b、在连接中进行大数据量传输 c、通过三次握手完成连接,是可靠协议 d、必须建立连接,效率会稍低3、他们是如何实现的呢?使用ServerSocket类来代表服务器端,public class ServerSocket extends Object,使用Socket类来代表客户端,public class Socket extends Object。4、UDP传输 (1)DatagramSocket,建立发送端send(DatagramPacket p)、接收端receive(DatagramPacket p) (2)DatagramPacket,数据报包用来实现无连接包投递服务,构造函数有DatagramPacket(byte[] buf,int length,InetAddress address,int port)等 (3)通信实现(发送端): a、建立udpsocket服务,例如DatagramSocket ds = new DatagramSocket()对象 b、提供数据,并将数据封装到数据包中,即将数据转换成字节数组,再使用DatagramPacket进行封装,例如byte[] buf = "udp is sending".getByte();DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByname("192.168.0.100"),10000) c、通过socket服务的发送功能,将数据包发出去,ds.send(dp); d、关闭资源,例如ds.close(); (4)通信实现(接收端): a、建立udpSocket服务,例如 DatagramSocket ds = new DatagramSocket(10000); b、建立一个数据包,因为接收到的是一个字节数据,数据包对象中有更多的功能用于提取字节数据的信息,例如 byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf,buf.length); c、通过socket服务的接收方法将收到的数据获取到DatagramPacket中,ds.receive(dp); d、通过DatagramPacket的功能将数据流解读出来,并输出到需要的地方,例如,String ip = dp.getAddress().getHostAddress();String data = new String(dp.getData(),0,dp.getLength()); e、关闭资源,ds.close();5、TCP传输(1)Socket建立客户端,SeverSocket建立服务器端 (2)建立连接后,通过Socket中的IO流进行数据传输 (3)关闭Socket (4)通信实现(客户端): a、建立socket服务,tcp是面向连接的,在建立socket服务时就要指定要连接的主机和端口以建立连接,例如Socket soc = new Socket("192.168.0.100",10003); b、建立用于获取或写入socket输入输出流的IO流对象,例如OutputStream out = s.getOutputStream;InputStream in = new InputStream(); c、向输出流写入数据,数据即可从socket输出流输出,out.write("tcpmsg is sending".getByte());使用输入流读取即可获取socket输入流的数据,InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);String str = new String(buf,0,len); d、关闭资源,soc.close(); (5)通信实现(服务端): a、建立SeverSocket服务,并监听一个端口,SeverSocket ss = newSeverSocket(10003); b、通过accept方法获取连接过来的客户端对象,Socket s = ss.accept(); c、客户端如果发来数据,服务端使用上一步获取的对应客户端对象读取数据,InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);String str = new String(buf,0,len); d、关闭客户端,释放资源,s.close() e、关闭服务端,(如果还要等待下一个客户端连接的话,也可以不关闭服务端),ss.close();最后举一个例子来说明一下他们具体的工作方式,这样我们将会更加清楚他们是如何工作的。import java.io.*;import java.net.*;class TransClient{public static void main(String[] args) throws Exception{Socket s = new Socket("192.168.1.254",10005);//定义读取键盘数据的流对象。BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//定义目的,将数据写入到socket输出流。发给服务端。//BufferedWriter bufOut = //new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));PrintWriter out = new PrintWriter(s.getOutputStream(),true);//定义一个socket读取流,读取服务端返回的大写信息。BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));String line = null;while((line=bufr.readLine())!=null){if("over".equals(line))break;out.println(line);// bufOut.write(line);// bufOut.newLine();// bufOut.flush();String str =bufIn.readLine();System.out.println("server:"+str);}bufr.close();s.close();}}class TransServer{public static void main(String[] args) throws Exception{ServerSocket ss = new ServerSocket(10005);Socket s = ss.accept();String ip = s.getInetAddress().getHostAddress();System.out.println(ip+"....connected");//读取socket读取流中的数据。BufferedReader bufIn =new BufferedReader(new InputStreamReader(s.getInputStream()));//目的。socket输出流。将大写数据写入到socket输出流,并发送给客户端。//BufferedWriter bufOut = //new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));PrintWriter out = new PrintWriter(s.getOutputStream(),true);String line = null;while((line=bufIn.readLine())!=null){System.out.println(line);out.println(line.toUpperCase());// bufOut.write(line.toUpperCase());// bufOut.newLine();// bufOut.flush();}s.close();ss.close();}}  ------- android培训java培训、期待与您交流! ----------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值