java

    技术2025-07-31  11

    代码纯记事本书写,不保证正确

    TCP

    一、任务:使用tcp协议实现客户端发送数据,服务器接收并在控制台显示。 二、代码实现: 1、MyServerSocket:等待客户端连接,并将socket对象传递至ServerSocketThread类来进行交互。

    class MyServerSocket{ // 此类中创建服务器,获取客户端socket。传递至服务器线程类ServerSocketThread进行交互。 public static void main(String[] argv)throws Exception{ ServerSocket server = new ServerSocket(8888);// 使用8888端口 while(true){ Socket socket = server.accept();// 接收客户端socket System.out.println("新用户连接"); new Thread(new ServerSocketThread(socket)).start();// 新建线程处理客户端 } } }

    2、ServerSocketThread:处理客户端发送的消息并在控制台显示。

    class ServerSocketThread implements Runnable { // 此类中接收客户端socket并处理 private BufferedReader bufferedReader;// 输入流 private PrintStream printStream;// 输出流 private Socket socket;// 客户端 /*** * 构造方法初始化socket与输入输出流 ***/ public ServerSocketThread(Socket socket){ this.socket = socket; printStream = new PrintStream(socket.getOutputStream());// 获取输出流 // 获取输入流 bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); } public void run(){ while(true){ try{ String str = bufferedReader.readLine();// 等待接收 System.out.println("接收到:"+str);// 控制台显示 }catch(Exception e){ e.printStackTrace } } } }

    3、Client:客户端类进行数据的发送。

    class Client{ // 此类创建客户端并连接服务器,发送消息 public static void main(String[] argv) throws Exception{ Socket socket = new Socket("127.0.0.1",8888);// 链接服务器 PrintStream printStream = new PrintStream(socket.getOutputStream());// 实例化输出流 while(true){ printStream.println("测试");// 输出测试 printStream.flush();// 刷出 Thread.sleep(1000);// 睡眠1秒 } } }

    UDP

    一、任务:使用udp协议实现两用户进行数据的发送与接收 1、udp8888:使用端口8888向端口9999发送数据并使用UDP_JieShouThread类来接收数据。

    class udp8888{ // 启动8888端口作为udp端口,并发送数据 public static void main(String[] argv)throws Exception{ DatagramSocket socket = new DatagramSocket(8888); String str = "端口8888"; // 实例化数据包 DatagramPacket data = new DatagramSocket(str.getBytes(),str.getBytes().lenfth(),InetAddress.getByName("localhost"),9999); // 启动接收线程 new Thread(new UDP_JieShouThread(socket)).start(); while(true){ socket.send(data); Thread.sleep(1000); } } }

    2、udp9999:同1使用端口9999向端口8888发送数据并使用UDP_JieShouThread类来接收数据。

    class udp9999{ // 启动8888端口作为udp端口,并发送数据 public static void main(String[] argv)throws Exception{ DatagramSocket socket = new DatagramSocket(9999); String str = "端口9999"; // 实例化数据包 DatagramPacket data = new DatagramSocket(str.getBytes(),str.getBytes().length(),InetAddress.getByName("localhost"),8888); // 启动接收线程 new Thread(new UDP_JieShouThread(socket)).start(); while(true){ socket.send(data); Thread.sleep(1000); } } }

    3、UDP_JieShouThread:使用多线程接收数据并在控制台显示。

    class UDP_JieShouThread implements Runnable { // udp接收处理。接收datagramsocket对象使用recevxxx方法接收。 private DatagramSocket socket; public UDP_JieShouThread(DatagramSocket socket){ this.socket = socket; } public void run{ try{ byte[] buff = new byte[1024]; DatagramPacket data = new DatagramPacket(buff,100); while(true){ socket.receive(data); System.out.println(new String(buff,0,data.getlength())); } }catch(Exception e){ e.printStackTrace(); } } }

    总结:使用tcp与udp相关api简单实现了数据的收发,可在此基础上进行数据的群发,指定用户发送等练习。

    Processed: 0.011, SQL: 9