简单的UDP服务端和客户端示例
UDP的理论不再多说,我这里直接给出一个关于UDP的HelloWorld程序,代码明了,希望对刚入门的学生有所帮助!
当然,实际上,在这块我也刚入门!
首先写服务端代码,服务端邦定本地的IP和端口来监听访问:
package udp; import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress; /**
* UDP服务类
*/
public class UdpServerSocket { private byte[] buffer = new byte[1024];
private static DatagramSocket ds = null;
private DatagramPacket packet = null;
private InetSocketAddress socketAddress = null; /**
* 测试方法
*/
public static void main(String[] args) throws Exception {
String serverHost = "127.0.0.1";
int serverPort = 3344;
UdpServerSocket udpServerSocket = new UdpServerSocket(serverHost,
serverPort);
while (true) {
udpServerSocket.receive();
udpServerSocket.response("你好,吃了吗!");
}
} /**
* 构造函数,绑定主机和端口
*/
public UdpServerSocket(String host, int port) throws Exception {
socketAddress = new InetSocketAddress(host, port);
ds = new DatagramSocket(socketAddress);
System.out.println("服务端启动!");
} /**
* 接收数据包,该方法会造成线程阻塞
*/
public final String receive() throws IOException {
packet = new DatagramPacket(buffer, buffer.length);
ds.receive(packet);
String info = new String(packet.getData(), 0, packet.getLength());
System.out.println("接收信息:" + info);
return info;
} /**
* 将响应包发送给请求端
*/
public final void response(String info) throws IOException {
System.out.println("客户端地址 : " + packet.getAddress().getHostAddress()
+ ",端口:" + packet.getPort());
DatagramPacket dp = new DatagramPacket(buffer, buffer.length, packet
.getAddress(), packet.getPort());
dp.setData(info.getBytes());
ds.send(dp);
}
}
运行后提示服务端运行成功,程序开始监听端口,接收方法堵塞,当有访问时才会向下进行!
我们写客户端进行访问,看到网上的例子都是直接创建了 DatagramSocket 对象,而其实自己都不知道自己使用的端口是那个,这里我创建时会指定自己邦定的端口,其实很简单,就是初始化该对象时传递一个端口参数。
这里你访问客户端时客户端会打印你的IP和端口!
看一看客户端代码:
package udp; import java.io.*;
import java.net.*; /**
* UDP客户端程序,用于对服务端发送数据,并接收服务端的回应信息
*/
public class UdpClientSocket {
private byte[] buffer = new byte[1024]; private static DatagramSocket ds = null; /**
* 测试客户端发包和接收回应信息的方法
*/
public static void main(String[] args) throws Exception {
UdpClientSocket client = new UdpClientSocket();
String serverHost = "127.0.0.1";
int serverPort = 3344;
client.send(serverHost, serverPort, ("你好,亲爱的!").getBytes());
byte[] bt = client.receive();
System.out.println("服务端回应数据:" + new String(bt));
// 关闭连接
try {
ds.close();
} catch (Exception ex) {
ex.printStackTrace();
}
} /**
* 构造函数,创建UDP客户端
*/
public UdpClientSocket() throws Exception {
ds = new DatagramSocket(8899); // 邦定本地端口作为客户端
} /**
* 向指定的服务端发送数据信息
*/
public final void send(final String host, final int port,
final byte[] bytes) throws IOException {
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName(host), port);
ds.send(dp);
} /**
* 接收从指定的服务端发回的数据
*/
public final byte[] receive()
throws Exception {
DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
ds.receive(dp);
byte[] data = new byte[dp.getLength()];
System.arraycopy(dp.getData(), 0, data, 0, dp.getLength());
return data;
}
}
直接运行程序看效果!
简单的UDP服务端和客户端示例的更多相关文章
- socket创建UDP服务端和客户端
UDP服务端代码示例: from socket import * #1.创建数据报套接字 sockfd = socket(AF_INET, SOCK_DGRAM) #2.绑定服务端地 sockfd.b ...
- python创建udp服务端和客户端
1.udp服务端server from socket import * from time import ctime HOST = '' PORT = 8888 BUFSIZ = 1024 ADDR ...
- 动手实现一个较为简单的MQTT服务端和客户端
项目地址:https://github.com/hnlyf168/DotNet.Framework 昨天晚上大致测试了下 ,490个客户端(一个收一个发) 平均估计每个每秒60个包 使用mqtt协 ...
- gSOAP calc服务端与客户端示例
1. Web服务定义描述头文件 typedef double xsd__double; int ns__add(xsd__double a, xsd__double b, xsd__double &a ...
- 【GoLang】golang HTTP GET/POST JSON的服务端、客户端示例,包含序列化、反序列化
服务端代码示例: package main import ( "encoding/json" "fmt" "io/ioutil" " ...
- 编写一个简单的TCP服务端和客户端
下面的实验环境是linux系统. 效果如下: 1.启动服务端程序,监听在6666端口上 2.启动客户端,与服务端建立TCP连接 3.建立完TCP连接,在客户端上向服务端发送消息 4.断开连接 实现 ...
- netcore 实现一个简单的Grpc 服务端和客户端
参考资料,和详细背景不做赘述. 首先定义prop 文件 syntax ="proto3"; package RouteGrpc; service HelloWorld{ rpc S ...
- Hessian服务端和客户端示例
一.服务端 1.创建web项目,建立客户端调用的hessian接口和实现类. 接口: package com.ymx.hessian.service; import com.ymx.hessian.s ...
- PHP swoole UDP服务端和客户端
服务端 <?php $serv = ,SWOOLE_PROCESS,SWOOLE_SOCK_UDP); $serv->on('Packet',function ($serv,$data,$ ...
随机推荐
- 听说“辣鸡小隔膜”出V1.3了?
点击下载zip就送屠龙宝刀升级脚本(Version 1.2) 点击下载zip就送倚天宝剑种子测试器(Version 1.2) 顺便膜一波orz::Kevin
- 几道noip2018提高组初赛的题
以下做法来均自llj @Nicodafagood 一.单项选择题 7. 在一条长度为 1 的线段上随机取两个点,则以这两个点为端点的线段的期望 长度是( ).A. 1 / 2B. 1 / 3C. 2 ...
- NX二次开发-bat脚本文件切换NX的环境变量(NX路径和语言)
路径环境变量切换到NX9.bat @echo off setx /M UGII_BASE_DIR "D:\Program Files\Siemens\NX 9.0" ------- ...
- electron-vue构建桌面应用
一.项目搭建 electron-vue是vue-cli和electron结合的项目,比单独使用vue构建起的electron项目要方便很多. 1.初始化项目并运行 vue init simulated ...
- 秦曾昌人工智能课程---7、决策树集成学习Tree Ensembles
秦曾昌人工智能课程---7.决策树集成学习Tree Ensembles 一.总结 一句话总结: 其实机器模型减少variance的比较好的方式就是 多个模型取平均值 1.CART是什么? classi ...
- C#Object与XML文件或二进制文件之间的转化
Object To Xml 文件 public static bool Serializer<T>(object obj, string path) { FileStream xmlfil ...
- 用python, PIL在图像上添加文字(可以控制,调节为水印等)
最近想在图像上,添加想要的文字,首先想到的是matplotlib,但是这个更加倾向于画图(柱状图,折线图之类) opencv这个库肯定也行,但是为了和我现有程序连接在一起,我选择了PIL 其中字体的设 ...
- 使用python和tushare查询股票历史名称变更记录
接口:namechange 描述:历史名称变更记录 注:tushare库下载和初始化教程,请查阅我之前的文章 输入参数 名称 | 类型 | 必选 ...
- 【Latex】一些使用
http://www.mohu.org/info/symbols/symbols.htm GG..研究个公式就搞这么晚了..还不知道那三个报错的是怎么回事.. 意识模糊..睡了睡了. # Latex ...
- vue created与activated的区别
搬运自:https://www.cnblogs.com/goloving/p/9256212.html 使用<keep-alive>会将数据保留在内存中,如果要在每次进入页面的时候获取最新 ...