import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.net.SocketException;
/**
* UDP客户端
*
*/
public class UDPClient {
// *********常数*********
private static final int DEFAULT_RECEIVE_BUFFER_SIZE = 8192;
private static final int DEFAULT_SO_TIMEOUT = 30000;
// *********成员变量*********
private SocketAddress serverSocketAddress;
private byte[] sendData;
private DatagramPacket output;
private int receiveBufferSize; // in bytes
private DatagramSocket ds;
// *********构造函数*********
/**
*
* 构建一个UDPClient对象。
*
* @param serverAddress 服务地址
* @param serverPort 服务器监听端口
* @throws SocketException
*/
public UDPClient(String serverAddress, int serverPort) throws SocketException {
this(serverAddress, serverPort, new byte[1], DEFAULT_RECEIVE_BUFFER_SIZE, DEFAULT_SO_TIMEOUT);
}
/**
*
* 构建一个UDPClient对象。
*
* @param serverAddress 服务地址
* @param serverPort 服务器监听端口
* @param sendData 发送的数据
* @throws SocketException
*/
public UDPClient(String serverAddress, int serverPort, byte[] sendData) throws SocketException {
this(serverAddress, serverPort, sendData, DEFAULT_RECEIVE_BUFFER_SIZE, DEFAULT_SO_TIMEOUT);
}
/**
*
* 构建一个UDPClient对象。
*
* @param serverAddress 服务地址
* @param serverPort 服务器监听端口
* @param sendData 发送的数据
* @param receiveBufferSize 接收缓存大小
* @throws SocketException
*/
public UDPClient(String serverAddress, int serverPort, byte[] sendData, int receiveBufferSize)
throws SocketException {
this(serverAddress, serverPort, sendData, receiveBufferSize, DEFAULT_SO_TIMEOUT);
}
/**
*
* 构建一个UDPClient对象。
*
* @param serverAddress 服务地址
* @param serverPort 服务器监听端口
* @param sendData 发送的数据
* @param receiveBufferSize 接收缓存大小
* @param timeout 超时
* @throws SocketException
*/
public UDPClient(String serverAddress, int serverPort, byte[] sendData, int receiveBufferSize, int timeout)
throws SocketException {
SocketAddress sa = new InetSocketAddress(serverAddress, serverPort);
this.serverSocketAddress = sa;
this.sendData = sendData;
this.output = new DatagramPacket(sendData, sendData.length, sa);
this.receiveBufferSize = receiveBufferSize;
this.ds = new DatagramSocket(0);
this.ds.setSoTimeout(timeout);
}
// *********成员方法*********
/**
*
* 构建一个UDPClient对象。
*
* @param serverAddress 服务地址
* @param serverPort 服务器监听端口
* @param sendData 发送的数据
* @param receiveBufferSize 接收缓存大小
* @param timeout 超时
* @throws SocketException
*/
public void setServerSocketAddress(SocketAddress serverSocketAddress) {
this.serverSocketAddress = serverSocketAddress;
}
/**
*
* 构建一个UDPClient对象。
*
* @param serverAddress 服务地址
* @param serverPort 服务器监听端口
* @param sendData 发送的数据
* @param receiveBufferSize 接收缓存大小
* @param timeout 超时
* @throws SocketException
*/
public void setSendData(byte[] sendData) {
this.sendData = sendData;
}
/**
* 发送数据并且接受数据。
*/
public byte[] sendAndReceive() throws IOException {
send();
return receive();
}
/**
* 只发送数据。
*/
public void send() throws IOException {
output.setSocketAddress(serverSocketAddress);
output.setData(sendData);
output.setLength(sendData.length);
ds.connect(serverSocketAddress);
ds.send(output);
}
/**
* 接收数据。
*/
public byte[] receive() throws IOException {
byte[] response = null;
DatagramPacket input = new DatagramPacket(new byte[receiveBufferSize], receiveBufferSize);
// next line blocks until the response is received
ds.receive(input);
int numBytes = input.getLength();
response = new byte[numBytes];
System.arraycopy(input.getData(), 0, response, 0, numBytes);
// may return null
return response;
}
/**
* 关闭Socket。
*/
public void close() {
this.ds.close();
}
}
分享到:
相关推荐
UDP 客户端 服务端 网络编程 自己写的基于udp的本地网络编程
UDP多多线程编程,客户端和服务端均可发送和接收,同时支持并发,可以连接多个客户端
基于Visual C++6.0平台,使用C++语言编写而成,包括服务器和客户端
在路上工作室温馨提示:工程通过一条指令讲明UDP客户端和服务端交互过程,仅供网络编程初学者参考
详见:https://blog.csdn.net/weixin_38566632/article/details/124289573 Qt网络编程——TCP 1. 概念 2. 服务器 3. 客户端 4. TCP服务器和客户端互传文件
网络编程工具支持TCP,UDP,客户端服务端,自动回复,手动回复,定时发送
Linux下基于UDP的socket编程,适用多客户端之间,服务器与客户端之间的通信。客户端和服务端代码分开了。notepad++可打开
内涵三个文件,客户端程序,服务器程序,和公共函数头文件,本人是在Ubuntu14.0.4环境下写的,欢迎下载
这是自己编的一个基于UDP的客户端小程序,对初学者会有帮助。
本文介绍的Linux UDP客户端代码是一份简单的示例代码,适用于初学者学习网络编程时练手和实践。通过这个示例代码,读者可以学习到UDP协议的基本概念和原理,以及如何使用Linux系统调用函数创建、配置和发送UDP数据包...
windows网络编程 UDP实现客户端与服务端之间的单词查询
基于TCP或UDP的客户端与服务器编程网络聊天-课程设计(含课程报告和代码)
socket 网络编程 TCP协议 UDP协议 服务器和客户端之间的传输
Linux下基于UDP的socket编程,适用多客户端之间,服务器与客户端之间的通信。在阿里云服务器上已通过测试。notepad++可打开
通过ReciveFrom()方法接收指定主机发送的消息(需提供主机IP地址及端口)下面用代码实现简单的服务器---客户端通信服务器端:客户端: 执行过程:(1)启动服务器(2)启动客户端,并向服务器发送数据分
一个非常好的基于UDP的网络聊天程序客户端程序
基于UDP的聊天室编程2(客户端)--由于该程序内含两个小程序,受上传权限20M的影响,只能将两个小程序分开,此为该聊天室程序的客户端,请继续下载基于UDP的聊天室编程1(服务器端),下载完后请放在同一个文件夹中...
文件时简单的UDP服务器程序和UDP客户端程序的例子,这两个程序都是Win32应用程序,在本地机器上的8888端口进行通信
利用 CAsyncSocket 类编写简单的客户 -服务器程序,并使用 数据报方式传递信息,我们将分别编写客户端和服务器的程序并进行连接。 客户端具备发送命令和接收服务器返回的功能,同时能够指定所要发 送的服务端的 IP ...
udp网络程序客户端,linux下C编程