Java 网络编程
InetAddress类
1.InetAddress用来代表IP地址。一个InetAdress的对象就代表着一个IP地址
2.如何创建InetAddress的对象:getByName(String host)
3.getHostName(): 获取IP地址对应的域名
getHostAddress():获取IP地址
基于Socket的TCP编程
客户端Socket的工作过程包含以下基本的步骤
1.创建一个Socket的对象,通过构造器指明服务端的IP地址,以及其接收程序的端口号
2.getOutputStream():发送数据,方法返回OutputStream的对象
3.具体的输出过程
4.关闭相应的流和Socket对象
服务器程序的工作过程包含以下基本的步骤:
1.创建一个ServerSocket的对象,通过构造器指明自身的端口号
2.调用其accept()方法,返回一个Socket的对象
3.调用Socket对象的getInputStream()获取一个从客户端发送过来的输入流
4.对获取的输入流进行的操作
5.关闭相应的流以及Socket、ServerSocket的对象
//TCP编程例三:从客户端发送文件给服务端,服务端保存到本地。并返回“发送成功”给客户端。并关闭相应的连接。 //如下的程序,处理异常时,要使用try-catch-finally!!本例仅为了书写方便~ public class TestTCP3 { @Test public void client()throws Exception{ //1.创建Socket的对象 Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9898); //2.从本地获取一个文件发送给服务端 OutputStream os = socket.getOutputStream(); FileInputStream fis = new FileInputStream(new File("1.jpg")); byte[] b = new byte[1024]; int len; while((len = fis.read(b)) != -1){ os.write(b,0,len); } socket.shutdownOutput(); //3.接收来自于服务端的信息 InputStream is = socket.getInputStream(); byte[] b1 = new byte[1024]; int len1; while((len1 = is.read(b1)) != -1){ String str = new String(b1,0,len1); System.out.print(str); } //4.关闭相应的流和Socket对象 is.close(); os.close(); fis.close(); socket.close(); } @Test public void server() throws Exception{ //1.创建一个ServerSocket的对象 ServerSocket ss = new ServerSocket(9898); //2.调用其accept()方法,返回一个Socket的对象 Socket s = ss.accept(); //3.将从客户端发送来的信息保存到本地 InputStream is = s.getInputStream(); FileOutputStream fos = new FileOutputStream(new File("3.jpg")); byte[] b = new byte[1024]; int len; while((len = is.read(b)) != -1){ fos.write(b, 0, len); } System.out.println("收到来自于" + s.getInetAddress().getHostAddress() + "的文件"); //4.发送"接收成功"的信息反馈给客户端 OutputStream os = s.getOutputStream(); os.write("你发送的图片我已接收成功!".getBytes()); //5.关闭相应的流和Socket及ServerSocket的对象 os.close(); fos.close(); is.close(); s.close(); ss.close(); } }
UDP网络通信
类 DatagramSocket 和 DatagramPacket 实现了基于 UDP 协议网络程序。
UDP数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。
DatagramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。
UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接
流 程
public class TestUDP { // 发送端 @Test public void send() { DatagramSocket ds = null; try { ds = new DatagramSocket(); byte[] b = "你好,我是要发送的数据".getBytes(); //创建一个数据报:每一个数据报不能大于64k,都记录着数据信息,发送端的IP、端口号,以及要发送到 //的接收端的IP、端口号。 DatagramPacket pack = new DatagramPacket(b, 0, b.length, InetAddress.getByName("127.0.0.1"), 9090); ds.send(pack); }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(ds != null){ ds.close(); } } } // 接收端 @Test public void rceive() { DatagramSocket ds = null; try { ds = new DatagramSocket(9090); byte[] b = new byte[1024]; DatagramPacket pack = new DatagramPacket(b, 0, b.length); ds.receive(pack); String str = new String(pack.getData(), 0, pack.getLength()); System.out.println(str); }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(ds != null){ ds.close(); } } } }
URL编程
URL(Uniform Resource Locator):统一资源定位符,它表示 Internet 上某一资源的地址。
URL的基本结构由5部分组成:
<传输协议>://<主机名>:<端口号>/<文件名> 例如: http://192.168.1.100:8080/helloworld/index.jsp
构造器
public URL (String spec):通过一个表示URL地址的字符串可以构造一个URL对象。例如:URL url = new URL ("http://www. atguigu.com/");
public URL(URL context, String spec):通过基 URL 和相对 URL 构造一个 URL 对象。例如:URL downloadUrl = new URL(url, “download.html")
public URL(String protocol, String host, String file); 例如:new URL("http", "www.atguigu.com", “download. html");
public URL(String protocol, String host, int port, String file); 例如: URL gamelan = new URL("http", "www.atguigu.com", 80, “download.html");
一个URL对象生成后,其属性是不能被改变的,但可以通过它给定的方法来获取这些属性:
public String getProtocol( ) 获取该URL的协议名 public String getHost( ) 获取该URL的主机名 public String getPort( ) 获取该URL的端口号 public String getPath( ) 获取该URL的文件路径 public String getFile( ) 获取该URL的文件名 public String getRef( ) 获取该URL在文件中的相对位置 public String getQuery( ) 获取该URL的查询名
URL的方法 openStream():能从网络上读取数据
如果既有数据的输入,又有数据的输出,则考虑使用URLConnection
URLConnection:表示到URL所引用的远程对象的连接。当与一个URL建立连接时,首先要在一个 URL 对象上通过方法 openConnection() 生成对应的 URLConnection 对象。如果连接过程失败,将产生IOException.
URL netchinaren = new URL ("http://www.atguigu.com/index.shtml"); URLConnectonn u = netchinaren.openConnection( );
通过URLConnection对象获取的输入流和输出流,即可以与现有的CGI程序进行交互。
public Object getContent( ) throws IOException public int getContentLength( ) public String getContentType( ) public long getDate( ) public long getLastModified( ) public InputStream getInputStream( )throws IOException public OutputSteram getOutputStream( )throws IOException