java网络编程之UDP实例

package Socket;

import java.net.DatagramPacket;
import java.net.InetAddress;

public class Dgram {

    public static DatagramPacket toDatagram(String s, InetAddress destIA,
            int destPort) {
        byte[] buf = new byte[s.length() + 1];
        s.getBytes(0, s.length(), buf, 0);
        return new DatagramPacket(buf, buf.length, destIA, destPort);
    }

    public static String toString(DatagramPacket p) {
        return new String(p.getData(), 0, p.getLength());
    }
}
package Socket;

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

public class ChatterServer {
    static final int INPORT = 1712;
    private byte[] buf = new byte[1000];
    private DatagramPacket dp = new DatagramPacket(buf, buf.length);
    private DatagramSocket socket;

    public ChatterServer() {
        try {
            socket = new DatagramSocket(INPORT);// 创建一接收消息的对象,而不是每次接收消息都创建一个
            System.out.println("Server started");
            while (true) {
                socket.receive(dp);
                //接收到客户端的消息
                String rcvd = Dgram.toString(dp) + ",from address:"
                        + dp.getAddress() + ",port:" + dp.getPort();
                System.out.println("From Client:"+rcvd);

                String echoString = "From Server Echoed:" + rcvd;
                DatagramPacket echo = Dgram.toDatagram(echoString,
                        dp.getAddress(), dp.getPort());
                //将数据包发送给客户端
                socket.send(echo);
            }
        } catch (SocketException e) {
            System.err.println("Can‘t open socket");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Communication error");
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new ChatterServer();
    }
}
package Socket;

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

public class ChatterClient extends Thread {

    private DatagramSocket s;
    private InetAddress hostAddress;
    private byte[] buf = new byte[1000];
    private DatagramPacket dp = new DatagramPacket(buf, buf.length);
    private int id;

    public ChatterClient(int identifier) {
        id = identifier;
        try {
            s = new DatagramSocket();
            hostAddress = InetAddress.getByName("localhost");

        } catch (UnknownHostException e) {
            System.err.println("Cannot find host");
            System.exit(1);
        } catch (SocketException e) {
            System.err.println("Can‘t open socket");
            e.printStackTrace();
            System.exit(1);
        }
        System.out.println("ChatterClient starting");
    }

    public void run() {
        try {
            for (int i = 0; i < 25; i++) {
                String outMessage = "Client #" + id + ",message #" + i;
                s.send(Dgram.toDatagram(outMessage, hostAddress,
                        ChatterServer.INPORT));
                s.receive(dp);
                String rcvd = "Client #" + id + ",rcvd from " + dp.getAddress()
                        + ", " + dp.getPort() + ":" + Dgram.toString(dp);
                System.out.println(rcvd);
            }
        } catch (IOException e) {
            e.printStackTrace();
            System.exit(1);
        }
    }

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            new ChatterClient(i).start();
        }
    }
}

java网络编程之UDP实例,布布扣,bubuko.com

时间: 2024-10-10 17:59:43

java网络编程之UDP实例的相关文章

java网络编程之TCP实例

Dgram类 package Socket; import java.net.DatagramPacket; import java.net.InetAddress; public class Dgram { public static DatagramPacket toDatagram(String s, InetAddress destIA, int destPort) { byte[] buf = new byte[s.length() + 1]; s.getBytes(0, s.leng

黑马程序员——Java网络编程之UDP传输

网络编程 网络模型 通讯要素:InetAddress(对象):ip地址,网络中设备的标识,不可记忆,可用主机名,本地回环地址:127.0.0.1主机名localhost 端口号 传输协议:UDP,将数据的源及目的封装成数据包中,不需要建立连接,每个数据包的大小限制在64K内,无连接,是不可靠协议,不需要建立连接,速度快.力求速度,不求数据的准确性.比如聊天软件,网络会议. TCP:建立连接,形成传输数据的通道,在连接中进行大数据量传输,通过三次握手完成连接,是可靠协议,必须建立连接效率稍低. S

浅析Java网络编程之UDP传输(一)

网络传输方式一般有两种--TCP和UDP.本文用于简单了解一下UDP传输方式. 一.UDP有何特点? 1.面向无连接的: 2.面向报文的,且每一份报文不超过64KB: 3.不可靠但高效(不用建立连接): 4.支持一对一.一对多.多对一.多对多的交互通讯: 对于这些特点,没有什么为什么,事实而已啦! 二.在Java中怎么玩UDP? 在Java中,将建立UDP服务相关操作封装到了DatagramSocket类中,将数据报相关操作封装到了DatagramPacket类中. 三.具体玩的思路是什么? U

[学习笔记]Java网络编程之UDP通讯

1. 体系结构 计算机网络各层及其协议的集合,称为网络的体系结构.目前公认的计算机网络体系结构有概念清楚理论完善的OSI七层协议结构和实际上广泛应用的TCP/IP四层体系结构. 2. 各层概述 应用层:直接为用户的程序提供服务,如支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等. 运输层:负责向两个主机中进程之间的通信提供服务,主要使用面向连接的TCP协议和无连接的UDP协议. 网络层:负责为分组交换网上不同主机提供地址交付的通信服务,该层使用IP协议,所以在该层传送的数据称之为IP数

java网络编程之UDP讲解

先上客户端代码 package com.test.net; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPClient { /** *UDP客户端 */ public static void main(String[] args) throws Exception { DatagramSocket socket=new Dat

Java网络编程之UDP程序设计

1.UDP简介 使用UDP发送消息,对方不一定收到,因为所有的信息使用数据报的形式发送出去,这就要求客户端要始终等待接收服务器发送过来的信息,在Java中使用DatagramSocket类和DatagramPacket类完成UDP程序的开发. 2.程序实现 使用DatagramPacket类包装一条要发送的信息,之后使用DatagramSocket类用于完成信息的发送操作.DatagramPacket类的常用方法: 类型 方法 描述 构造 DatagramPacket(byte[] buf, i

Unix网络编程之UDP实例

首先先看一下UDP客户/服务器交互的典型情形,如下图: 由上图可知,客户端程序不需要与服务器端建立连接,只需要调用sendto函数向服务器发送数据,或者调用recvfrom函数从服务器接收数据即可.最明显地特点就是服务器端只是比客户端多调用了一个bind函数来显式绑定一个端口.事实上客户端也可以通过bind来绑定端口,只不过没有那个必要. 实例代码: //server.c #include <stdlib.h> #include <stdio.h> #include <sys

Java网络编程之UDP网络编程

一.UDP网络通信 1.类DatagramSocket和DatagramPacket实现了基于UDP协议网络程序.2.UDP数据报通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达.3.DatagramPacket对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号.4.UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接.如同发快递包裹一样. 二.Da

【转】JAVA网络编程之Socket用法

JAVA网络编程之Socket用法 分类: JAVA2012-08-24 15:56 710人阅读 评论(0) 收藏 举报 在客户/服务器通信模式中,客户端需要主动建立与服务器连接的Socket,服务器端收到客户端的连接请求,也会创建与客户端连接的Socket.Socket可以看做是通信连接两端的收发器,客户端和服务店都通过Socket来收发数据. 1.构造Socket public Socket() 通过系统默认类型的 SocketImpl 创建未连接套接字 public Socket(Str