一.网络编程
1.url.ParseURL源代码
运行结果
2.url. URLReader源代码
3.url.URLConnectionReader源代码
4.url. URLdownload源代码
该例子用网络图片的url地址,从网络下载一张图片,并保存在本地硬盘的e盘的images文件夹,图片重命名为“百度1.jsp”
5.发送和接收网络数据
该例子包含两个程序,一个是客户端,用于连接服务器端,发送数据给服务器端,并接收服务器端的数据,实现代码是:
根据上述代码可知,连接的服务器地址是:
http://localhost:8080/ServerWeb/ReverseServlet, 即本地服务器中ServerWeb项目的一个Servlet。该Servlet的作用是接收客户端发送的字符串,反序后,发送回客户端,即客户端发送出一个字符串,收到该字符串的反序。
ServerWeb项目是一个Web项目,其中Servlet中的关键代码是:
request.setCharacterEncoding("utf-8"); String reverseStr = "no string"; String string = request.getParameter("string");//接收客户端传过来的字符串 if(string!=null){ reverseStr=new StringBuffer(string).reverse().toString();//把字符串反序 } System.out.println(reverseStr);//打印出反序后的字符串 response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); out.print(reverseStr);//返回给客户端 out.flush(); out.close();
运行时先运行服务器端,然后运行客户端。
客户端结果,输入“你好中国”,接收到反序的字符串:
服务器端结果,启动服务器后,接收到客户端的字符串,并反序打印出来:
6.单客户端和服务器端的案例代码
基于TCP协议的网络编程可以实现C/S结构的程序,C客户端发送数据,S服务器端接收数据后发回给客户端,客户端接收后输出到屏幕。客户端通过创建Socket连接服务器,服务器端监听到连接后,也创建Socket,两端的Socket连在一起,形成一个输出输出流,客户端发送消息,用输出流,服务器端接收消息用输入流,反之亦然。
运行时,先运行服务器端,再运行客户端,在客户端输入数据,发送给服务器,服务器接收后再返回给客户端,客户端接收后打印到屏幕。
7.多客户端和单服务端的案例代码
该例子可以实现多个客户端的聊天室功能,即任何一个客户端发送消息给服务器,服务器会转发给所有与它连接的客户端。因为服务器要维护与多个客户端的连接,这里用线程实现,每个客户端和服务器端连接后,服务器端都会开启一个线程,用于接收当前这个客户端的消息,并转发给所有的客户端。
该例子由3个Java类实现,客户端:tcp. EchoMultiClient,服务器端:tcp. EchoMultiServer,tcp.EchoServerThread(服务器端使用的线程类)。
客户端类,该客户端发送消息和接收消息分别在一个线程中进行:
服务器端代码,该代码中每监听到客户端的一个连接,就调用线程类创建并启动一个线程对象。
服务器端使用的线程类代码:
该程序运行时,先启动服务器端代码,再多次启动客户端。
例如以下运行效果,启动了服务器端后,启动了3次客户端,3个客户端分别发送消息,效果如下:
8.单客户端和服务器端的案例代码
基于UDP协议的网络编程通信原理和TCP协议不同,基于TCP协议的通信是客户端和服务器端建立连接管道,这个管道就像一个输出输出流,发送消息使用输出流,接收消息使用输入流;基于UDP协议的通信不建立连接,一端向另一端发送消息需要创建数据报,数据报中包含目标地址和要发送的内容。
该例实现了客户端向服务器端发送消息,服务器端收到后,提取出内容和客户端的地址,把消息再发回给客户端。
从以上代码可以看出,客户端和服务器端发送和接收消息的原理类似,区别只是服务器端绑定了固定的端口号,而客户端不用绑定固定端口号。
先运行服务器端代码,再运行客户端代码,效果如下:
9.基于UDP的广播数据报的发送和接收
基于UDP协议,可以发送广播数据报,即发送一个数据报出去,目标地址是多台主机。接收广播数据报需要使用MulticastSocket类。
该例的客户端实现了两个线程,一个线程使用DatagramSocket发送数据报给服务器;另一个线程使用MulticastSocket绑定固定端口4446,加入广播地址230.0.0.1,接收来自服务器的广播数据。
该例的服务器端接收到客户端的数据报后,把内容封装成广播数据报,广播地址是230.0.0.1,把广播数据报发送出去。该例的客户端可以接收到。