UDP :传输之间不需要建立连接,不可靠的传输协议。传输快,只能传输64k。
TCP:传输之间需要建立连接,可靠的传输协议.需要建立连接,效率低.可以无限量传输,http是基于tcp实现的.
运行时都应先运行服务器(服务器是提供服务的机器,ip和端口是固定的,一般情况下不会关机,时刻响应请求)。
常见的服务器软件有Aapche 的 Tomcat,IIS(MS),Nginx(负载均衡)。
TCP示例:
public static void main(String[] args) throws IOException { System.out.println("这是服务端"); ServerSocket serverSocket = new ServerSocket(6789); //客户端socket Socket socket = serverSocket.accept(); //读数据 InputStream inputStream = socket.getInputStream(); byte bytes[] = new byte[1024]; inputStream.read(bytes); System.out.println("收到客户端:"+ new String(bytes)); //将数据转成大写 String result = new String(bytes).toUpperCase(); //输出流,发送信息 OutputStream outputStream = socket.getOutputStream(); outputStream.write(result.getBytes()); } }
public class ClientDemo { public static void main(String[] args) throws IOException { System.out.println("这是客户端"); //Socket(String host, int port) Socket socket = new Socket("192.168.107.17", 6789); //输出流,发送信息 OutputStream outputStream = socket.getOutputStream(); outputStream.write("abcd".getBytes()); //输入流,读取信息 InputStream inputStream = socket.getInputStream(); byte bytes[] = new byte[1024]; inputStream.read(bytes); System.out.println(new String(bytes)); } }
UDP示例 :
public class SendDemo { public static void main(String[] args) throws IOException { System.out.printf("这是发送端"); Scanner sc = new Scanner(System.in); for (int i = 0; i <10 ; i++) { System.out.println("发送:"); String msg = sc.next(); byte[] msgs = msg.getBytes(); DatagramSocket datagramSocket = new DatagramSocket(); //IP 地址 cmd 中 ipconfig 可查询到IP地址 InetAddress ip = InetAddress.getByName("你的IP地址"); DatagramPacket packet = new DatagramPacket(msgs,msgs.length,ip,8888);//端口号 datagramSocket.send(packet); } } }
public static void main(String[] args) throws IOException { System.out.println("这是接收端:"); DatagramSocket datagramSocket1=new DatagramSocket(8888); //端口号可更改但要和服务端的一致 1024之前的不要使用 系统会用到如果你的是1024之前的可能会被替换掉 for (int i = 0; i < 10; i++) { byte[] msg = new byte[1024]; DatagramPacket datagramPacket=new DatagramPacket(msg,msg.length); datagramSocket1.receive(datagramPacket); String result = new String(msg, 0, msg.length); System.out.println("发送者ip:"+datagramPacket.getAddress().getHostAddress()); System.out.println(" 接收到:"+result); }