java基础 UDP通信

无连接通信 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();
    }

}

原文地址:https://www.cnblogs.com/qingyundian/p/8537471.html

时间: 2024-10-08 06:57:29

java基础 UDP通信的相关文章

java实现UDP通信

1.概述 用DatagramSocket与DatagramPacket实现UDP通信.UDP比TCP相对来说简单一点,不需要等待连接,且处理数据不需要用输出输出流,只需要DatagramPacket.严格来说,UDP没有服务端和客户端之分,只有发送端与接收端之分. 2.发送端 发送端首先建立DatagramSocket与DatagramPacket,设置好DatagramPacket的端口与ip,再通过DatagramSocket发送. (1)创建DatagramSocket与DatagramP

Java 简单UDP通信

Java手册 java.net Class DatagramSocket java.lang.Object java.net.DatagramSocket All Implemented Interfaces: Closeable, AutoCloseable 已知直接子类: MulticastSocket public class DatagramSocket extends Object implements Closeable 这个类代表数据包发送和接收数据报套接字. 数据报套接字发送或接

java基础——线程通信机制,生产者消费者

package communication; /* 使用两个线程1,2交替打印1-100 线程通信方法: 1.wait():一旦执行此方法,当前线程进入阻塞态,并释放锁 2.notify():会唤醒被wait的一个线程,如果有多个线程wait,则唤醒优先级高的 3.notifyAll():唤醒所有被wait的线程 说明: 1.wait(),notify(),notifyAll()使用在同步代码块或同步方法中,不能用在lock方法中 2.这三个方法的调用者必须是同步代码块或同步方法中的锁对象(同步

[java]基于UDP的Socket通信Demo

java课编程作业:在老师给的demo的基础上实现客户端发送数据到服务器端,服务器端接受客户端后进行数据广播. 整体功能类似于聊天室,代码部分不是太难,但是在本机测试的时候出现这样的问题: 服务端通过将每一个Socket客户端的IP存入Set集合,每次接受到数据后都向当前所有的IP转发.但是本机演示的时候所有开的ChatClient客户端都是同一IP,怎么测试呢? 解决办法就是本机测试时候服务端向多个不同的端口转发就好了,这样跑起来的客户端是在不同端口上进行监听的(只是为了实现广播,实际应用下还

java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

 *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时候才能消费,仓空则等待. *3.当消费者发现仓储没有产品可消费的时候,会唤醒等待生产者生产. *4.生产者在生产出可以消费的产品的时候,应该通知等待的消费者去消费. 下面先介绍个简单的生产者消费者例子:本例只适用于两个线程,一个线程生产,一个线程负责消费. 生产一个资源,就得消费一个资源. 代码如下: pub

java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)

1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法,定义在Object基类中. wait()方法:对此对象调用wait方法导致本线程放弃对象锁,让线程处于冻结状态,进入等待线程的线程池当中.wait是指已经进入同步锁的线程,让自己暂时让出同步锁,以便使其他正在等待此锁的线程可以进入同步锁并运行,只有其它线程调用notify方

JAVA网络编程--UDP通信

首先网络传输数据需了解例如以下三点 1.找到对方IP 2.数据要发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序用数字进行了标识.为了方便称呼这个数字,叫做port,逻辑port 3.  定义通信规则.这个通信规则称为协议. 国际组织定义了通用协议TCP/IP. 127.0.0.1本机回环地址 不易记忆,可用主机名 主机名:localhost 0-65535port范围 0-1024系统使用或保留port .当中mysql的port号为 3306 一.UDP UDP相对于

java服务器与linux c客户端之间udp通信

java服务器和 linux c客户端采用udp协议互相通信,最关键的点是数据结构的统一.比如说,在c中一个char型 是8bit,在java中,char 是16bit,所以c和java的char类型不能直接互相转换.在本例程中,c的char 类型和 java的byte类型,两个数据类型都是8bit,这样就保证了数据正确传输的基本条件之一. java服务器代码如下: import java.io.*; import java.lang.*; import java.net.*; public c

Java基础加强之多线程篇(线程创建与终止、互斥、通信、本地变量)

线程创建与终止 线程创建 Thread类与Runnable接口的关系 public interface Runnable { public abstract void run(); } public class Thread implements Runnable { /* What will be run. */ private Runnable target; ...... /** * Causes this thread to begin execution; the Java Virtu