TCP:TCP在网络通讯上面具备顽强的生命力,例如远程链接(Telnet)和文件传输(FTP)都须要不定长度的数据被可靠地传输,可是这种可靠的传输是须要付出代价的,由于对数据内容正确性的检验占用计算机处理时间和网络宽带,一次TCP效率不及UDP。java
TCP:可靠,无大小限制,可是须要链接创建时间,差错控制开销大。网络
UDP:UDP操做简单,仅须要较少的监护,所以一般应用于局域网高可靠性的分散系统的Server/Client应用程序,例如视频会议系统,并不须要彻底保证数据的绝对准确性,只须要保持连贯便可,这种状况下,显然UDP要更合理一些。经常使用在交互实时性高的系统上面,如网路游戏,视频会议。.net
UDP:不可靠,有大小限制,64KB如下,不须要创建链接,差错控制开销小。code
Server:视频
package com.wangbiao.test; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintStream; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; public class Server { // server public static void server() throws Exception { ServerSocket server = new ServerSocket(8888); String message = "hello everyone"; System.out.println("Server is up.waiting for connect"); Socket client = server.accept(); // OutputStream out=client.getOutputStream(); // byte[] b=new byte[1024]; // out.write(b); // System.out.println(new String(b,0,b.length)); PrintStream ps = new PrintStream(client.getOutputStream()); ps.println(message); ps.close(); client.close(); server.close(); } // server chat with client public static void server_chat() throws Exception { ServerSocket server = new ServerSocket(8888); Socket client = null; BufferedReader in = null; PrintStream out = null; boolean working = true; boolean flag = true; while (working) { System.out.println("Server is waiting for connect"); client = server.accept(); in = new BufferedReader(new InputStreamReader( client.getInputStream())); out = new PrintStream(client.getOutputStream()); while (flag) { String str = in.readLine(); if (null == str || "".equals(str)) { flag = false; } else { if ("bye".equals(str)) { flag = false; } else { System.out.println("Cient:" + str); out.println("Server:" + str); } } } } in.close(); out.close(); client.close(); server.close(); } // UDP public static void send_message() throws Exception { DatagramPacket dp=null; DatagramSocket ds=null; String content="hello UDP"; ds=new DatagramSocket(3000); dp=new DatagramPacket(content.getBytes(),content.length(),InetAddress.getByName("localhost"),9000); ds.send(dp); ds.close(); } public static void main(String[] args) throws Exception { // server(); //server_chat(); send_message(); } }
Client:server
package com.wangbiao.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.Socket; import java.net.UnknownHostException; public class Client { // client public static void client() throws Exception { Socket client = new Socket("localhost", 8888); String str = "test"; BufferedReader br = new BufferedReader(new InputStreamReader( client.getInputStream())); String content = br.readLine(); System.out.println(content); br.close(); client.close(); } // server chat with client public static void client_chat() throws Exception { Socket client = new Socket("localhost", 8888); BufferedReader input = new BufferedReader(new InputStreamReader( System.in)); BufferedReader in = new BufferedReader(new InputStreamReader( client.getInputStream())); PrintStream out = new PrintStream(client.getOutputStream()); boolean flag = true; while (flag) { String str = input.readLine(); out.println(str); if ("bye".equals(str)) { flag = false; } else { String mess=in.readLine(); System.out.println(mess); } } in.close(); out.close(); client.close(); } // UDP public static void receive_message() throws Exception { DatagramPacket dp=null; DatagramSocket ds=null; byte[] b=new byte[1024]; ds=new DatagramSocket(9000); dp=new DatagramPacket(b, 1024); ds.receive(dp); System.out.println("waiting for server message"); String content=dp.getAddress().getHostAddress()+"-"+new String(dp.getData()); System.out.println(content); ds.close(); } public static void main(String[] args) throws Exception { //client(); //client_chat(); receive_message(); } }