菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
438
0

java基础 UDP通信 user datagram protocol 用户数据豆协议 TCP transmission control protocol 传输控制协议 多线程TCP

原创
05/13 14:22
阅读数 80889

无连接通信 UDP

客户端

package com.swift.test;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

/*使用UDP通信编写一个Java程序.要求:获取键盘输入的内容.发送到服务端.服务端接收后.在控制台上打印接收到的内容
客戶端
    1.创建键盘录入对象.获取键盘录入数据
    2.创建DatagramSocket对象
    3.创建DatagramPacket对象.并封装键盘录入的数据
    4.发送数据
    5.释放流资源
服務端
    1.创建DatagramSocket对象
    2.创建DatagramPacket对象
    3.接收数据存储到DatagramPacket对象中
    4.获取DatagramPacket对象的内容
    5.在控制台上打印接收到的内容
    6.释放流资源
*/


public class DemoUDPClient {

    public static void main(String[] args) throws IOException {

        Scanner scan=new Scanner(System.in);
        System.out.println("请输入要传达的内容:");
        String str=scan.nextLine();
        DatagramSocket datagramSocket=new DatagramSocket();
        byte[] buf=str.getBytes();
        DatagramPacket datagramPacket=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.105.22"),6464);
        datagramSocket.send(datagramPacket);
        datagramSocket.close();
    }

}

服务端

package com.swift.test;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/*使用UDP通信编写一个Java程序.要求:获取键盘输入的内容.发送到服务端.服务端接收后.在控制台上打印接收到的内容
客戶端
    1.创建键盘录入对象.获取键盘录入数据
    2.创建DatagramSocket对象
    3.创建DatagramPacket对象.并封装键盘录入的数据
    4.发送数据
    5.释放流资源
服務端
    1.创建DatagramSocket对象
    2.创建DatagramPacket对象
    3.接收数据存储到DatagramPacket对象中
    4.获取DatagramPacket对象的内容
    5.在控制台上打印接收到的内容
    6.释放流资源
*/

public class DemoUDPServer {

    public static void main(String[] args) throws IOException {

        DatagramSocket datagramSocket=new DatagramSocket(6464);
        InetAddress ip=InetAddress.getLocalHost();
        String ipString=ip.getHostAddress();
        String nameString=ip.getHostName();
        System.out.println(ipString+" "+nameString);
        byte[] buf=new byte[1024];
        DatagramPacket datagramPacket=new DatagramPacket(buf,1024);
        datagramSocket.receive(datagramPacket);
        System.out.println(new String(buf));
        datagramSocket.close();
        
    }

}

结果

 有连接通信TCP

客户端

package com.swift.test;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

/*使用socket编写一个Java程序,要求:客户端发送内容“我是客户端”到服务端,服务端接收后,在控制台上打印接收到的内容,并返回内容“我来自服务端”到客户端,客户端接收服务端的发送的内容后将接收内容打印在控制台
客户端
    1.创建客户端的Socket对象
    2.获取Socket的输出流对象
    3.写数据给服务器
    4.获取Socket的输入流对象
    5.使用输入流,读反馈信息
    6.关闭流资源
*/

public class DemoTCPClient {

    public static void main(String[] args) throws IOException {

        Socket s=new Socket(InetAddress.getByName("10.254.3.116"),8888);
        OutputStream out=s.getOutputStream();
        byte[] buf="我是客户端".getBytes();
        out.write(buf);
        InputStream in=s.getInputStream();
        byte[] bytes=new byte[128];
        in.read(bytes);
        System.out.println(new String(bytes));
     s.close(); } }

服务端

package com.swift.test;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

/*使用socket编写一个Java程序,要求:客户端发送内容“我是客户端”到服务端,服务端接收后,在控制台上打印接收到的内容,并返回内容“我来自服务端”到客户端,客户端接收服务端的发送的内容后将接收内容打印在控制台

服务器端
    1.创建服务器端ServerSocket对象,指定服务器端端口号
    2.开启服务器,等待着客户端Socket对象的连接,如有客户端连接,返回客户端的Socket对象
    3.通过客户端的Socket对象,获取客户端的输入流,为了实现获取客户端发来的数据
    4.通过客户端的输入流,获取流中的数据
    5.通过客户端的Socket对象,获取客户端的输出流,为了实现给客户端反馈信息
    6.通过客户端的输出流,写数据到流中
    7.关闭流资源*/

public class DemoTCPServer {

    public static void main(String[] args) throws IOException {

        ServerSocket serverSocket=new ServerSocket(8888);
        InetAddress ip=InetAddress.getLocalHost();
        System.out.println(ip.getHostAddress());
        Socket s=serverSocket.accept();
        InputStream in=s.getInputStream();
        byte[] buf=new byte[128];
        in.read(buf);
        System.out.println(new String(buf));
        OutputStream out=s.getOutputStream();
        out.write("我来自服务端".getBytes());
     serverSocket.close();
     s.close();
} }

 多线程TCP

客户端

package com.swift.test;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

/*使用socket编写一个Java程序,要求:客户端发送内容“我是客户端”到服务端,服务端接收后,在控制台上打印接收到的内容,并返回内容“我来自服务端”到客户端,客户端接收服务端的发送的内容后将接收内容打印在控制台
客户端
    1.创建客户端的Socket对象
    2.获取Socket的输出流对象
    3.写数据给服务器
    4.获取Socket的输入流对象
    5.使用输入流,读反馈信息
    6.关闭流资源
*/

public class DemoTCPClient implements Runnable{

    @Override
    public void run() {

        Socket s = null;
        try {
        s=new Socket(InetAddress.getByName("10.254.3.116"),8888);
        OutputStream out=s.getOutputStream();
        byte[] buf=("I am Client."+InetAddress.getLocalHost().getHostName()).getBytes();
        out.write(buf);
        InputStream in=s.getInputStream();
        byte[] bytes=new byte[128];
        in.read(bytes);
        System.out.println(new String(bytes));
        } catch(Exception e){
            e.printStackTrace();
        } finally {
            try {
                s.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

服务端

package com.swift.test;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

/*使用socket编写一个Java程序,要求:客户端发送内容“我是客户端”到服务端,服务端接收后,在控制台上打印接收到的内容,并返回内容“我来自服务端”到客户端,客户端接收服务端的发送的内容后将接收内容打印在控制台

服务器端
    1.创建服务器端ServerSocket对象,指定服务器端端口号
    2.开启服务器,等待着客户端Socket对象的连接,如有客户端连接,返回客户端的Socket对象
    3.通过客户端的Socket对象,获取客户端的输入流,为了实现获取客户端发来的数据
    4.通过客户端的输入流,获取流中的数据
    5.通过客户端的Socket对象,获取客户端的输出流,为了实现给客户端反馈信息
    6.通过客户端的输出流,写数据到流中
    7.关闭流资源*/

public class DemoTCPServer {

    public static void main(String[] args) throws IOException {

        ServerSocket serverSocket = new ServerSocket(8888);
        InetAddress ip = InetAddress.getLocalHost();
        System.out.println(ip.getHostAddress());

        while (true) {
            Socket s = serverSocket.accept();
            InputStream in = s.getInputStream();
            byte[] buf = new byte[128];
            in.read(buf);
            System.out.println(new String(buf));
            OutputStream out = s.getOutputStream();
            out.write("I come from Server.".getBytes());
            s.close();
        }
    }

}

多线程开启多个客户端任务

package com.swift.test;

public class DemoTCPTest {

    public static void main(String[] args) {

        DemoTCPClient client=new DemoTCPClient();
        Thread t1=new Thread(client);
        Thread t2=new Thread(client);
        Thread t3=new Thread(client);
        t1.start();
        t2.start();
        t3.start();
    }

}

 

发表评论

0/200
438 点赞
0 评论
收藏