udp 服务器界面监听
今天在做项目的时候,发现不同子网下是不能做UDP通信的,不知道是不是这样呢
遇到一个错误:eclipse遇到报错:
The type JPEGImageEncoder is not accessible due to restriction on required library C:\Java\jre1.6.0_07\lib\rt.jar
google后发现用以下方式解决:
这个事eclipse的设置问题,它默认把这些受访问限制的API设成了ERROR,你只要把
Windows-Preferences-Java-Complicer-Errors/Warnings
里面的Deprecated and restricted API中的Forbidden references(access rules)选为Warning就可以编译通过了。
Java UDP服务器代码:
package gui;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.Scanner; import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
////
import java.io.IOException;
import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.InetAddress; public class guiHello extends JFrame implements ActionListener { private static JLabel label = new JLabel("192.168.0.3:8888");
private static JTextArea ta=new JTextArea(30,80);
private JFileChooser jfc=new JFileChooser(new File("."));
private JButton bOpen,bSave;
private JButton bListen,bOk;
public guiHello()
{
super("UDP监听GUI");
JScrollPane ps=new JScrollPane(ta);
bOpen=new JButton("选取源文件");
bSave=new JButton("保存变量");
bListen = new JButton("开始监听"); //这个是自定义的按钮
bOk = new JButton("测试按钮");
//自定义两个 JPanel
JPanel panel1 = new JPanel(new BorderLayout());
JPanel panel2 = new JPanel(new BorderLayout()); //两个panel第二个背景为红色
panel2.setBackground(Color.red);
panel1.add(bListen, BorderLayout.CENTER);
add(panel1);
panel2.add(label, BorderLayout.EAST);
add(panel2); setLayout(new FlowLayout(FlowLayout.CENTER,10,15));
// add(label);
add(ps);
add(bOpen);
add(bSave);
// add(bListen);
add(bOk);
Border b = new LineBorder(Color.ORANGE, 2);
bListen.setBorder(b);
bOpen.addActionListener(this);
bSave.addActionListener(this);
bListen.addActionListener(this);
bOk.addActionListener(this);
setVisible(true);
setSize(1600,1500); }
public static void main(String[] args) {
// TODO Auto-generated method stub
guiHello frm=new guiHello();
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void actionPerformed(ActionEvent e)
{
JButton jbt=(JButton)e.getSource();
if(jbt==bOpen)
{
int status=jfc.showOpenDialog(this);
if(status!=JFileChooser.APPROVE_OPTION)
ta.setText("没有选择文件");
else {
try{
File file1=jfc.getSelectedFile();
Scanner scan=new Scanner(file1);
String info="";
while(scan.hasNext())
{
String str=scan.nextLine();
info+=str+"\r\n";
}
scan.close();
ta.setText(info);
}
catch(FileNotFoundException ex){ }
} }else if(jbt==bSave){
Save(); }else if(jbt==bListen){ //监听函数须加try catch
Runnable tr = new Runnable() {
public void run() {
try {
Listen(); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
javax.swing.SwingUtilities.invokeLater(tr); }else{
ta.setText("服务器已开启");
test(); }
} //每个按钮对应的函数
private static void Save(){
ta.setText("保存的按钮"); }
private static void Listen() throws IOException{
//1、创建DatagramSocket;指明服务器端口
DatagramSocket server = new DatagramSocket(8888);
byte[] recvBuf = new byte[1024];
//2、创建数据包,用于接收内容。
DatagramPacket recvPacket
= new DatagramPacket(recvBuf , recvBuf.length);
//3、接收数据
server.receive(recvPacket);
//System.out.println(packet.getData().toString());
//以上语句打印信息错误,因为getData()返回byte[]类型数据,直接toString会将之序列化,而不是提取字符。应该使用以下方法:
String recvStr = new String(recvPacket.getData() , 0 , recvPacket.getLength());
System.out.println("Hello World!" + recvStr);
int port = recvPacket.getPort();
//地址为InetAddress类型:(为了回发时使用)
InetAddress inetAddr = recvPacket.getAddress();
//地址为字符串类型:
String strAdd = recvPacket.getAddress().getHostAddress();
ta.setText("监听\n到客户机地址:"+strAdd+"\n端口:"+port+"\n内容:"+recvStr); String sendStr = "Hello ! I'm Server";
byte[] sendBuf;
sendBuf = sendStr.getBytes();
DatagramPacket sendPacket
= new DatagramPacket(sendBuf , sendBuf.length , inetAddr , port );
server.send(sendPacket);
//4、关闭连接。
server.close(); }
private static void test(){ ta.setText("测试的按钮:bOk");
}
}
Java 客户机代码:
package socket;
/*UDP客户端
UDP客户端首先向被动等待联系的服务器发送一个数据报文。一个典型的UDP客户端主要执行下面三步:
1.创建一个DatagramSocket实例,可以选择对本地地址和端口号进行设置。
2.使用DatagramSocket类的send()方法和receive()方法发送和接受DatagramPacket实例,进行通信。
3.通信完成后,使用DatagramSocket类的close()方法来销毁该套接字。 DatagramSocket类的connect()方法确实允许指定远程地址和端口,但该功能是可选的。
*/
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.DatagramPacket; public class udpSendTest{ public static void main(String[] args) throws Exception{
//1、创建DatagramSocket用于UDP数据传送。
//DatagramSocket socket = new DatagramSocket(); //本机地址(默认的),任何可用端口
//本机地址(缺点是必须知道,并且必须是本地IP地址),指定本机端口 我方地址和端口
DatagramSocket socket = new DatagramSocket(4567, InetAddress.getByName("192.168.1.103")); //2、创建需要发送的数据包
byte[] buf = "哈利波特之死亡圣器,长岛是没有雪的2的222".getBytes();
//对方地址和端口192.168.0.3
DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.103"), 8888); //3、发送
socket.send(packet); //4、关闭连接
socket.close();
}
}
udp 服务器界面监听的更多相关文章
- .net core Kestrel宿主服务器自定义监听端口配置
在.net core的web程序中,除了可以在项目中硬编码服务器的监听端口外,还可以在外部通过json文件配置. 方法如下: 第一步:在项目中新建一个名为Hosting.json的文件.当然,文件名可 ...
- 安卓作为udp服务器,PC作为客户端,仅监听
安卓客户端作为udp服务器,监听其他客户端的数据,测试已成功 本次实验所用数据: 安卓作为服务器: 端口:8888 IP:192.168.1.104 电脑作为客户端: 端口:50 ...
- C#的UDP服务器
最新优化版本 /* http://www.cnblogs.com/zengqinglei/archive/2013/04/27/3046119.html */ using System; using ...
- ActiveMQ监听消息并进行转发,监听不同的mq服务器和不同的队列
工作中刚接触mq消息业务,其实也就是监听一下别的项目发送的消息然后进行对应的转发,但是监听的mq会有多个,而且转发的地址也可能有多个,这里就使用spring集成的方式!记录一下实现方式: 监听多个mq ...
- C# Socket系列一 简单的创建socket的监听
socket的应用场景,在快速,稳定,保持长连接的数据传输代码.Http也是socket封装出来的,基于一次请求一次回复,然后断开的socket连接封装. 比如我们常见的游戏服务器,目前的很火的物联网 ...
- linux网络连接的查看和端口的监听
网络软件都是由客户端和服务端组成,由服务端在服务器上监听指定的端口处理接收到的数据,而客户端是向服务器端监听的端口发送数据,并由服务器端对该数据进行处理,然后将处理结果返回给客户端. 那么我们在lin ...
- KestrelServer详解[1]:注册监听终结点(Endpoint)
具有跨平台能力的KestrelServer是最重要的服务器类型.针对KestrelServer的设置均体现在KestrelServerOptions配置选项上,注册的终结点是它承载的最重要的配置选项. ...
- Oracle 监听配置详解(转载)
使用ORACLE的SQL*Net V.2连接客户机和服务器,需配置每个客户机和服务器.在服务器上需配置的文件有:listener.ora./etc/services,在客户机上需配置tnsna ...
- 【故障•监听】TNS-12518、TNS-00517和 Linux Error:32:Broken pipe
[故障|监听]TNS-12518.TNS-00517和 Linux Error:32:Broken pipe 1.1 BLOG文档结构图 1.2 前言部分 1.2.1 导读和注意事项 各位技术爱 ...
随机推荐
- java XML转JSON格式
标签: XML转Json json 2014-05-20 20:55 6568人阅读 评论(6) 收藏 举报 分类: [J2SE基础](20) 代码如下所示,从这个例子中发现了代码库的重要性,如果 ...
- ubuntu升级php版本
如果安装的 PHP 版本过低的话,可以通过下面的指令来升级: sudo add-apt-repository ppa:ondrej/php5 sudo apt-get update sudo ...
- Android.mk文件详解(转)
源:Android.mk文件详解 从对Makefile一无所知开始,折腾了一个多星期,终于对Android.mk有了一个全面些的了解.了解了标准的Makefile后,发现Android.mk其实是把真 ...
- USB入门基础知识(转)
源:USB入门基础知识 相关名词: 主机(Host) 设备(Device) 接口(Interface) 管道(Pipe) 管道是主机与设备端点数据传输的连接通道,代表了主机的数据缓冲区与设备端点之间交 ...
- 使用flexbox来布局web应用
使用 flexbox 可以帮助你设计出引人注目的布局,并且在pc端或移动端能够很好的缩放.告别使用浮动的 <div> 元素.绝对定位 和一些JavaScript hacks, 使用仅仅几行 ...
- 算法系列001---dfs|多叉|解空间树理解
1.研究范围 1)多叉树,图的遍历 2)回溯法的解空间树=多叉树的遍历 2.研究方法 我们现在研究的是多叉树的遍历,突然想到为什么不能直接用二叉树的遍历方法呢?我们抱着这个问题,先找到多叉树的结构不同 ...
- Selenium2(java)启动常用浏览器 三
默认启动firefox浏览器 Webdriver driver = new FirefoxDriver(); 启动谷歌浏览器 配置chromedriver WebDriver driver; Syst ...
- post请求时2种传参方式
@Testpublic void dopost(){ String httpurl = "https://jin.caimao.com/api/user/loginSalt"; M ...
- freemarker配置,使用
最近在项目中用到freemarker,总是报一些莫名其妙的错误. 调查得知是由于在配置文件中属性[tag_syntax]的设置问题,我们的环境下该属性(auto_detect)默认设置了自动检测,也就 ...
- vim设置注意记录
set vb t_vb= setlocal buftype = "解决不能保存buff错误