package com.study.socket; import javax.sound.sampled.Port; import java.io.IOException; import java.net.*; /** * UDP Client客服端 */ public class UDPClient { public static void main(String[] args) throws IOException { //1.定义消息 服务端ip地址 端口号 String msg = "用户名:sw;密码:123456"; InetAddress address = InetAddress.getByName("DESKTOP-VQBUTGQ"); int port = 8000; //2.创建数据报 byte[] data = msg.getBytes(); DatagramPacket packet = new DatagramPacket(data, data.length, address , port ); //3.创建socket DatagramSocket socket = new DatagramSocket(); //4.发送消息 socket.send(packet); //5.接收反馈信息 byte[] data1 = new byte[1024]; DatagramPacket packet1 = new DatagramPacket(data1 , 0 , data1.length); socket.receive(packet1); String rt = new String(data1,0,packet1.getLength()); System.out.println("这是客户端,服务端反馈信息为: " + rt); //5.释放资源 socket.close(); } }
package com.study.socket; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; /** * UDP 服务器端 */ public class UDPServer { public static void main(String[] args) { try { //1.建立socket并制定端口号 DatagramSocket socket = new DatagramSocket(8000); int num = 0; while (true){ UDPServerThread thread = new UDPServerThread(socket); thread.setPriority(4); thread.run(); num++; System.out.println("服务器端接受了 " + num + " 个客户端请求!"); } } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
package com.study.socket; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * UDP server 多线程实现 */ public class UDPServerThread extends Thread{ DatagramSocket socket = null; public UDPServerThread(DatagramSocket socket){ this.socket = socket; } @Override public void run() { try { byte[] data = new byte[1024]; DatagramPacket packet = new DatagramPacket(data,data.length); //3.接收客户端发送的数据信息 socket.receive(packet);//此方法在接收到数据报之前一直阻塞 //4.读取数据报信息 String msg = new String(data,0,packet.getLength()); System.out.println("UDP server服务器接收到的信息: " + msg); //5.反馈信息 String rt = "欢迎您!"; byte[] data1 = rt.getBytes(); InetAddress address = packet.getAddress(); int port = packet.getPort(); DatagramPacket packet1 = new DatagramPacket(data1, data1.length , address , port ); socket.send(packet1); } catch (IOException e) { e.printStackTrace(); } } }
package com.study.socket; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; /** * socket编程模拟客服端 */ public class Client { public static void main(String[] args) { //1.创建客户端socket Socket socket = null; try { socket = new Socket("127.0.0.1",8888); //2.获取输出流 OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream()); PrintWriter pw = new PrintWriter(osw); pw.write("用户名:polly;密码:809"); pw.flush(); //4.释放资源 pw.close(); osw.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
package com.study.socket; import java.io.*; import java.net.ServerSocket; import java.net.Socket; /** * socket编程模拟服务器端 */ public class Server { public static void main(String[] args) { try { //1.建立服务端socket ServerSocket serverSocket = new ServerSocket(8888); int num = 0; while(true){ //2.监听端口 Socket socket = serverSocket.accept(); ServerThread st = new ServerThread(socket); st.setPriority(4);//设置线程的优先级,范围是【1,10】 默认是5 st.start(); num++; System.out.println("服务器端接受 " + num + " 个客户端请求!"); } } catch (IOException e) { e.printStackTrace(); } } }
package com.study.socket; import java.io.*; import java.net.Socket; /** * 服务器线程实现 */ public class ServerThread extends Thread { Socket socket = null; public ServerThread(Socket socket){ this.socket = socket; } @Override public void run() { if(socket != null){ //读取输入流 InputStream is = null; InputStreamReader isr = null; BufferedReader br = null; OutputStreamWriter osw = null; PrintWriter pw = null; try { is = socket.getInputStream(); isr = new InputStreamReader(is); br = new BufferedReader(isr); System.out.println("服务器读取客户端信息:" + socket.getLocalAddress() + " : " + socket.getLocalPort() + " " + br.readLine()); //返回响应流 osw = new OutputStreamWriter(socket.getOutputStream()); pw = new PrintWriter(osw); pw.write("请求已接到!"); pw.flush(); } catch (IOException e) { e.printStackTrace(); } finally { //关闭资源 try { if(pw != null) pw.close(); if(osw != null) osw.close(); if(br != null) br.close(); if(isr != null) isr.close(); if(is != null) is.close(); if(socket != null) socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
startClient
多线程Server
上传文件的业务分析