package com.sjf;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketException;
/**
* @time 2015-05-27
* @desc UDP通信
* @author sjf0115
*
*/
public class Server {
private byte[] buffer = new byte[1024];
private DatagramSocket socket = null;
private DatagramPacket packet = null;
private InetSocketAddress socketAddress = null;
private InetAddress clientAddress;
private String clientIP;
private int clientPort;
private String clientData;
/**
* 构造函数,绑定主机和端口.
* @param ip IP 地址
* @param port 端口
* @throws Exception
*/
public Server(String ip, int port) throws Exception
{
Bind(ip,port);
System.out.println("[服务端启动]");
}
public Server() throws SocketException
{
socket = new DatagramSocket();
System.out.println("[服务端启动]");
}
/**
* 绑定监听地址和端口.
* @param ip IP地址
* @param port 端口
* @throws SocketException
*/
public void Bind(String ip, int port) throws SocketException {
socketAddress = new InetSocketAddress(ip, port);
socket = new DatagramSocket(socketAddress);
packet = new DatagramPacket(buffer, buffer.length);
}
public final String getOrgIp()
{
return clientIP;
}
/**
* 设置超时时间
* @param timeout 超时时间
* @throws Exception
*/
public void SetTimeout(int timeout) throws Exception
{
socket.setSoTimeout(timeout);
}
/**
* 获得超时时间.
* @return 返回超时时间.
* @throws Exception
*/
public int GetTimeout() throws Exception
{
return socket.getSoTimeout();
}
/**
* 接收数据包,该方法会造成线程阻塞.
* @return 返回接收的数据串信息
* @throws IOException
*/
public String Receive() throws IOException
{
socket.receive(packet);
clientAddress = packet.getAddress();
clientIP = clientAddress.getHostAddress();
clientPort = packet.getPort();
clientData = new String(packet.getData(), 0, packet.getLength());
return " ["+clientData+"]";
}
/**
* 将响应包发送给请求端.
* @param bytes 回应报文
* @throws IOException
*/
public void Send(String info) throws IOException
{
packet.setAddress(clientAddress);
packet.setPort(clientPort);
packet.setData(info.getBytes());
socket.send(packet);
}
/**
* 关闭udp监听口.
*/
public void close()
{
try
{
socket.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
/**
* 测试方法.
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
String serverHost = "127.0.0.1";
int serverPort = 3344;
Server udpServerSocket = new Server(serverHost, serverPort);
while (true)
{
String info = udpServerSocket.Receive();
System.out.println("["+udpServerSocket.clientPort+"]->"+info);
udpServerSocket.Send("Reponse-----"+info);
}
}
}
package com.sjf;
import java.io.*;
import java.net.*;
/**
* @time 2015-05-27
* @desc UDP通信
* @author QPING
*/
public class Client {
private byte[] buffer = new byte[1024];
private DatagramSocket socket = null;
private InetSocketAddress socketAddress = null;
private String clientIP;
private int clientPort;
private String clientData;
private InetAddress clientAddress;
private DatagramPacket sendPacket;
private DatagramPacket receivePacket;
public Client(String host, int port) throws Exception
{
socketAddress = new InetSocketAddress(host, port);
socket = new DatagramSocket(socketAddress);
System.out.println("服务端启动!");
}
/**
* 构造函数,创建UDP客户端
* @throws Exception
*/
public Client() throws Exception
{
socket = new DatagramSocket();
}
/**
* 设置超时时间,该方法必须在bind方法之后使用.
* @param timeout 超时时间
* @throws Exception
*/
public final void SetTimeout(final int timeout) throws Exception
{
socket.setSoTimeout(timeout);
}
/**
* 获得超时时间.
* @return 返回超时时间
* @throws Exception
*/
public int GetTimeout() throws Exception
{
return socket.getSoTimeout();
}
public DatagramSocket GetSocket()
{
return socket;
}
/**
* 向指定的服务端发送数据信息.
* @param ip 服务器主机地址
* @param port 服务端端口
* @param bytes 发送的数据信息
* @return 返回构造后俄数据报
* @throws IOException
*/
public DatagramPacket Send(String ip,int port,String info) throws IOException
{
byte[] bytes = info.getBytes();
sendPacket = new DatagramPacket(bytes, bytes.length);
sendPacket.setAddress(InetAddress.getByName(ip));
sendPacket.setPort(port);
socket.send(sendPacket);
return sendPacket;
}
/**
* 接收从指定的服务端发回的数据.
* @param lhost 服务端主机
* @param lport 服务端端口
* @return 返回从指定的服务端发回的数据.
* @throws Exception
*/
public String Receive(String lhost,int lport) throws Exception
{
receivePacket = new DatagramPacket(buffer, buffer.length);
socket.receive(receivePacket);
clientAddress = receivePacket.getAddress();
clientIP = clientAddress.getHostAddress();
clientPort = receivePacket.getPort();
clientData = new String(receivePacket.getData(), 0, receivePacket.getLength());
return "["+clientData+"]";
}
/**
* 关闭udp连接.
*/
public void close()
{
try
{
socket.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
/**
* 测试客户端发包和接收回应信息的方法.
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
String serverHost = "127.0.0.1";
int serverPort = 3344;
String myIP = "127.0.0.2";
int myPort = 3333;
Client client = new Client(myIP,myPort);
while(true)
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("["+myPort+"] ");
String str = br.readLine();
client.Send(serverHost, serverPort, str);
String info = client.Receive(serverHost, serverPort);
System.out.println("["+client.clientPort+"]->" + info);
}
}
}
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
分享到:
相关推荐
前面个有点问题,我回家打开时才发现, 问题是设置IP不对,我用了我机器的IP,呵呵 不过你看完后改一下就可以了 还有一个问题就是,发送的字符在接收时,在窗体的后机会有乱码, 这个是开始我也没有想到,现在改...
串口,TCP, UDP通信例子(源代码)
端口监听、消息的发送与接收,这个例子并没有界面,大家可以看看,原理及流程清楚了可以自己搭建一个界面实现。
这是一个使用JAVA UDP通信建立的网络传输案例,方便初始学者学习,交流,,此处只有源码..
Modbus允许多个 (大约240个) 设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。Modbus支持的具体协议有:Modbus TCP、Modbus UDP、Modbus RTU、ModbusRtuOverTcp、...
java中socket的TCP和UDP两种通信方式的例子
欧姆龙TCP/UDP网络通讯例子,通讯的每个节点都有详细说明,还有欧姆龙PLC程序例子,以及中文版通讯功能块。
Java中实现UDP协议编程详细文档,详解了在Java中使用UDP协议编程的相关类,给出一个UDP的服务端和客户端交互通信的例子,服务端循环等待客户端发送的信息,并对其进行回应,客户端向服务端发送信息,并接收服务端的...
自己写的一些关于java Socket UDP的一些例子,感觉里面应该写的挺全了。希望有助于大家的学习.不足之处多多指教.
近正在做一个项目,其中遇到了一个问题是java与.NET之间的通信问题。具体的问题是这样的: 客户端使用java,服务器端使用的是C#。两者之间使用基于TCP的... 首先是客户端的java代码(这是比较简单的部分) im
本项目是UDP项目,内含源码和教程可以直接部署,创作不易欢迎交流
本程序是利用java实现了UDP下的局域网通信,并打包成了EXE可执行文件,不需要java环境就可以直接运行在自己的电脑上,是学习网络通信的很好的例子
这是个很全面的java写的socket通信,使用套接字实现基于TCP协议的服务器和客户机程序,还有个UDP协议的例子。文档很详细。
Blender通过Java进行UDP套接字通信控制的例子 示例 1 第一个示例展示了如何在基于单独命令行的 Python 程序和 Blender 游戏引擎之间传递非常基本的字符串。 示例 2 第二个示例展示了如何通过 Java 应用程序在 ...
基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...
基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...
基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...
基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...
基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...