黑马程序员_java_06_java网络编程
来源:互联网 发布:分析网站制订优化目标 编辑:程序博客网 时间:2024/06/05 20:32
------Java培训、Android培训、iOS培训、.Net培训、期待与您交
1.网络编程概述
网络编程就是涉及到多个电脑使用的程序。如果要设计多个电脑连接并传输数据就必须涉及到ip地址,和计算机的端口号,计算机的ip地址在同一个网段的唯一的,这样就能够确定一台计算机,然后在确定这台计算机上的哪个端口(端口确定计算机上面的访问程序)。这样两台计算机上面的同一款软件就能够实现通讯功能。
两台计算机能够实现通讯必须确定使用那种计算机通讯协议,在计算机中有两种网络传输协议udp协议和tcp协议。
Udp协议: Upd不需要建立链接就能传送数据,把需要传输的数据打成一个包,应用程序只管发送或接收数据不管对方是否能够收到。传输数据的速度较快,但是安全性较低。一般情况下在传输视频格式的文件时用udp协议传输。因为该方式无连接所以为不可靠协议。
Tcp:在使用tcp协议传输的过程中必须建立链接(三次握手)才能够通讯。
这种传输数据的方式教安全,但是效率较低。
在java中网络编程类的结构图如下图所示
2.基于UDP协议的编程方法
在java中使用Udp协议传输数据,使用DatagramSocket类来完成数据的传输,使用DatagrammPacket类包装数据。
DatagramSocket类的使用规则
该类的三个常用构造方法
1.DatagramSocket()创建一个套接字对象,并把该对象绑定到可用的端口上面。
2.DatagramSocket(intport)创建一个套接字对象,并指定绑定本机端口号。
3.DatagramSocket(SocketAddress bindaddr) 创建一个套接字对象,并把该套接字对象绑定到指定的套接字地址。
该类常用方法介绍:
1.getInetAddress()该方法返回一个套接字链接地址的InetAddress对象。
2. voidreceive(DatagramPacket p) 从此套接字接收数据包
3. voidsend(DatagramPacket p) 从此套接字发送数据包
4. int getPort()该方法用于返回此套接字的端口号
5. void close() 关闭该套接字。
DatagramPacket类的使用规则
该类中的构造方法描述:
1.DatagramPacket(byte[]buf, int length) 创建一个数据包用来存储字节数组length长度的数据。
2. DatagramPacket(byte[]buf, int offset, int length) 创建一个数据包用来存储字节数组从offset到length长度的数据。
该类中的常用方法:
1. InetAddressgetAddress() 返回要发送到(接收到)数据包的地址
2. byte[]getData() 返回该数据包的缓冲区
3. int getLength()返回接收或发送的数据的长度。
练习一
建立一个文本转换器,客户端给服务器发送文本,服务端会将大写返回给客户端,而且客户端可以不断的进行文本转换。
import java.io.*;class UdpDemo2{public static void main(String[] args){}}class UdpSend2{public static void main(String[] args) throws Exception {DatagramSocket ds=new DatagramSocket(8888);BufferedReader br=new BufferedReader(new InputStreamReader(System.in));String line=null;while((line=br.readLine())!=null){if("886".equals(line)){break;}byte[] buf=line.getBytes();DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10000);ds.send(dp);}ds.close();}}class UdpReceive2{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);System.out.println(dp.getAddress()+"::"+new String(dp.getData(),0,dp.getLength()).toUpperCase()+"::"+dp.getPort());}}}
运行结果如下:
3.基于TCP协议的编程方法
在java语言中如果需要传输比较重要的数据,比如文件、图片等数据时用udp传输方式会造成文件损坏打不开的情况,这个时候我们就要选择使用tcp传输协议来完成我们的需求。Java在使用tcp协议传输的时候用到的是serverSocket,和socket类。
ServerSocket类是在服务器端使用的类主要用于描述服务器的功能。
ServerSocket类中的常用方法;
构造方法:
ServerSocket() 创建一个套接字服务器,但是该服务并没有绑定特定的端口。
ServerSocket(intport) 创建一个套接字服务器,但是该服务器绑定了port端口。
该类中的常用方法:
Socket accept() 监听服务端口,有客户端连接进来时返回一个socket对象。该方法在没有客户端链接进来之前一致处于阻塞状态。
InetAddressgetInetAddress()返回此套接字的所监听的InetAddress对象。
booleanisClosed() 返回该服务器是否已经关闭。
void close() 关闭此服务器对象。
Socket类的使用方式
该类用于计算机交互过程中描述客户端功能的对象。
该类中的常用方法:
Socket() 创建一个客户端服务,但是该服务并没有链接地址和链接端口。
Socket(InetAddress address, int port) ,Socket(String host, int port) 创建一个客户端服务器,该客户端服务器指定服务器端地址,及端口。
InetAddressgetInetAddress() 返回该套接字链接地址的InetAddress对象
InputStreamgetInputStream() 返回该套接字的字节输入流
OutputStreamgetOutputStream()返回该套接字的字节输出流
int getPort() 返回该套接字服务的端口号
voidshutdownInput() 向服务器发送字节输出流已经结束标识;
void shutdownOutput() 向服务器发送字节输出流已经结束
练习二
向服务器上传一个图片文件,上传成功以后服务器返回“上传成功”提示
importjava.io.*;import java.net.*;classPicUpThread implements Runnable{ private Sockets;publicPicUpThread(Socket s){ this.s=s;} public voidrun(){ try{ InputStream is=s.getInputStream(); OutputStream os=newFileOutputStream("C:\\11.jpg"); byte[] b=new byte[1024]; int len=0; while((len=is.read(b))!=-1) { os.write(b,0,len); } OutputStream ops=s.getOutputStream(); ops.write("File uploodsuccess".getBytes()); os.close(); s.close(); ops.close(); }catch(Exception e){ new RuntimeException("文件上传失败"); }} public staticvoid main(String[] args){ } }class PicServer{ public static void main(String[] args)throws Exception{ ServerSocket ss=new ServerSocket(10000); while(true){ Socket s=ss.accept(); System.out.println(ss.getInetAddress().getHostAddress()+"lianjiejinlai"); new Thread(new PicUpThread(s)).start(); }} }class PicClinet{ public static void main(String[]args)throws Exception { Socket s=newSocket("192.168.0.37",10000); InputStream is=newFileInputStream("c:\\1.jpg"); OutputStream pw=s.getOutputStream(); byte[] b=new byte[1024]; int len=0; while((len=is.read(b))!=-1){ pw.write(b,0,len); } s.shutdownOutput(); InputStream ips=s.getInputStream(); byte[] sb=new byte[1024]; int slen=0; slen=ips.read(sb); System.out.println(newString(sb,0,slen)); is.close(); pw.close(); } }
运行结果如下所示:
Url类的使用方式
类代表统一资源定位符,在java网络编程中代表网络地址的字符串。在其内部有各种方法得到网络地址的协议,服务器返回的数据,端口。等方法
url类中的常用方法介绍
构造方法总结
1.URL(Stringspec) 根据网络地址字符串创建一个URL对象。
2.URL(Stringprotocol, String host, int port, String file) 其中,protocol代表通信协议,host代表主机名,file代表文件名。如:new URL ("http" ,www.baidu.com, "/ test / a.text");
3. URL ( Stringprotocol , String host , int port , String file)
URL url = new URL ("http" , www.baidu.com, 80 , "/test / a.txt");
普通方法总结;
getDefaultPort(): 返回默认的端口号。
getFile(): 获得URL指定资源的完整文件名。
getHost(): 返回主机名。
getPath(): 返回指定资源的文件目录和文件名。
getPort(): 返回端口号,默认为-1。
getProtocol(): 返回表示URL中协议的字符串对象。
getRef(): 返回URL中的HTML文档标记,即#号标记。
getUserInfo: 返回用户信息。
toString: 返回完整的URL字符串。
InetAddress 类的使用方式
InetAddress类是吧网络链接的地址封装正对象,描述链接信息。
InetAddress类中的常用方法总结
该类中没有构造方法,所以想要得到该类的对象必须通过链接对象来返回该类的对象,比如。ServerSocket类中的,InetAddress getInetAddress() 、Socket类中的InetAddress getInetAddress()
该类中的普通方法:
getAddress(): 返回IP地址的字节形式。
getAllByName(): 返回指定主机名的IP地址。
getbyAddress(): 返回指定字节数组的IP地址形式。
getByName(): 返回指定主机名的IP地址对象。
getHostAddress(): 返回主机地址的字符串形式。
getLocalHost(): 返回当前主机名。
hastCode(): 返回InetAddress对象的哈希码。
toString: 返回地址转换成的字符串。
- 黑马程序员_java_06_java网络编程
- 【黑马程序员】网络编程
- 黑马程序员 网络编程
- 黑马程序员:网络编程
- 黑马程序员-------网络编程
- 黑马程序员-网络编程
- 黑马程序员:网络编程
- 黑马程序员--网络编程
- 黑马程序员--网络编程
- 黑马程序员-网络编程
- 黑马程序员-------网络编程
- 黑马程序员-网络编程
- 黑马程序员-----网络编程
- 黑马程序员-网络编程
- 黑马程序员-网络编程
- 黑马程序员 网络编程
- 黑马程序员----- 网络编程
- 黑马程序员 网络编程
- Android 自定义控件玩转字体变色 打造炫酷ViewPager指示器
- Spring Scope 学习笔记
- NSLineBreakMode简介
- hibernate 动态参数的绑定;从3.0到4.2改动 query.setParameter
- WPF中TreeView和Xml的结合使用案例
- 黑马程序员_java_06_java网络编程
- flash-热风焊盘的制作
- 各种操作 整理
- CSS3 @font-face
- Linux开发环境搭建与使用——Linux 常用命令的使用
- poj1584(判断多边形是否凸包,判断圆是否在多边形内)
- 黑马程序员_java_07_java面向对象
- Qt 按钮如何实现背景图片的加载
- mongodb 学习笔记及常用命令