参考:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html
一、网络通信的协议
TCP :采用捂手协议,类似打电话,要先建立连接,效率稍差
UDP:类似发短信,不需要先建立连接,会丢失数据
二、客户端和服务端编程(TCP)
1、基础的网络类:InetAddress类,该类代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类内
InetAddress inet1 = InetAddress.getByName("www.163.com"); ----使用域名创建对象
InetAddress inet2 = InetAddress.getByName("127.0.0.1"); --使用IP创建对象
2、客户端:java.net.Socket类代表客户端连接
Socket socket1 = new Socket(“192.168.1.103”,10000); ---->ip地址和端口号
(1)Socket客户端的步骤:
--设置连接的host及端口,根据host和端口得到客户端的Socket ; ---从客户端获取输入输出流; --从输入流中读取;---从输出流中写入
Socket s=new Socket(serverIp,port)
OutputStream os=s.getOutputStream(); os.write();
InputStream is=s.getInputStream(); is=.read();
3、服务器端 java.net.ServerSocket类代表服务器端
--绑定端口;--接收客户端连接 ;--获取输入输出流;--从输入流中读取;--从输出流中写入
ServerSocket serverSocket =new ServerSocket(port);
Socket socket=serverSocket.accept(); PrintWriter out =new PrintWriter(socket.getOutputStream());
InputStreamReader in=new InputStreamReader(socket.getInputStream());BufferedReader br =new BufferedReader(in);
二、UDP协议的客户端和服务端:UDP发送速度快,在用户量很大时,考虑速度
1、UDP客户端
--创建一个DatagramSocket ;--获取服务器地址;--创建需要发送的内容(DatagramPacket),设置地址和端口
--通过DatagramSocket发送DatagramPacket
DatagramSocket ds =new DatagramSocket();
byte[] buf =new byte[1024]
2、UDP服务器端
---创建DatagramSocket并绑定端口;--通过DatagramPacket读取输入,写入输入
三、URL编程
1、URL url =new URL("http://www.baidu.com") ---URL类封装了底层的TCP协议,使用的GET、Post方法
BuferedReader in =new BuferedReader(url.openStream());
2、URL连接 ---此时还没有连接上,需要URLConnection读取后才连接上,也可以通过URL直接去读取
四、高级网络编程:是在TCP、UDP协议上的封装,底层仍然通过Socket进行通讯,但上层封装了不同的协议:
1、CORBA协议:不能很好的支持Internet,穿透防火墙困难,通过名称获取资源
2、RMI:底层通过RMI/IIOP支持CORBA协议,不能很好的支持Internet协议,只能支持局域网协议,不需要Java EE服务器或Web服务器,但是需要注册机
3、Web Service协议:可支持Internet协议,不受防护墙限制,可直接通过HTTP协议传输,支持内容加密,签名已HTTPS,是SOA、ESB的基础;运行于Java EE服务器中
使用最多最广泛的协议,效率高,不需要考虑底层的一些实现,可使用wsdl2java生成客户端代码,
4、JMS协议:Java自有的协议,支持点对点通讯,支持订阅、广播方式通讯,可支持消息持久化,缺点:需要支持JMS的中间件
5、ZeroMQ协议:支持多种消息交换模式:请求、应答、订阅、广播、推拉模式