今天在做项目的时候,发现不同子网下是不能做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 服务器界面监听的更多相关文章

  1. .net core Kestrel宿主服务器自定义监听端口配置

    在.net core的web程序中,除了可以在项目中硬编码服务器的监听端口外,还可以在外部通过json文件配置. 方法如下: 第一步:在项目中新建一个名为Hosting.json的文件.当然,文件名可 ...

  2. 安卓作为udp服务器,PC作为客户端,仅监听

    安卓客户端作为udp服务器,监听其他客户端的数据,测试已成功 本次实验所用数据: 安卓作为服务器: 端口:8888            IP:192.168.1.104 电脑作为客户端: 端口:50 ...

  3. C#的UDP服务器

    最新优化版本 /* http://www.cnblogs.com/zengqinglei/archive/2013/04/27/3046119.html */ using System; using ...

  4. ActiveMQ监听消息并进行转发,监听不同的mq服务器和不同的队列

    工作中刚接触mq消息业务,其实也就是监听一下别的项目发送的消息然后进行对应的转发,但是监听的mq会有多个,而且转发的地址也可能有多个,这里就使用spring集成的方式!记录一下实现方式: 监听多个mq ...

  5. C# Socket系列一 简单的创建socket的监听

    socket的应用场景,在快速,稳定,保持长连接的数据传输代码.Http也是socket封装出来的,基于一次请求一次回复,然后断开的socket连接封装. 比如我们常见的游戏服务器,目前的很火的物联网 ...

  6. linux网络连接的查看和端口的监听

    网络软件都是由客户端和服务端组成,由服务端在服务器上监听指定的端口处理接收到的数据,而客户端是向服务器端监听的端口发送数据,并由服务器端对该数据进行处理,然后将处理结果返回给客户端. 那么我们在lin ...

  7. KestrelServer详解[1]:注册监听终结点(Endpoint)

    具有跨平台能力的KestrelServer是最重要的服务器类型.针对KestrelServer的设置均体现在KestrelServerOptions配置选项上,注册的终结点是它承载的最重要的配置选项. ...

  8. Oracle 监听配置详解(转载)

        使用ORACLE的SQL*Net V.2连接客户机和服务器,需配置每个客户机和服务器.在服务器上需配置的文件有:listener.ora./etc/services,在客户机上需配置tnsna ...

  9. 【故障•监听】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  导读和注意事项 各位技术爱 ...

随机推荐

  1. shell 实例学习

    安装crond:yum install crontabs  (http://blog.163.com/victory_wxl/blog/static/14130530220115296180333/) ...

  2. iOS开发——汉字转拼音

    以前有一次做一个天气预报的项目,有一个功能是输入城市名,请求该城市的天气,需要把汉字转化成拼音,比如深圳——>shenzhen,加入到参数中.当时在网上找了一下,网友给出的方法很多都用不了,现在 ...

  3. IOS开发中使用AFNetworking请求网络数据

    1.把AFNetworking的文件拖放到项目中(注意不同的版本方法不一样,本历程基于版本2013): 2.使用#import "AFNetworking.h"命令把AFNetwo ...

  4. js动画学习笔记

    <html> <head> <meta charest="utf-8"> <title>test</title> < ...

  5. html css基础(一)

    1.HTML:做静态网页,是一种标签语言, HTML结构: 一个HTML文档由4个基本部分组成: ① 一个文档声明:<!DOCTYPE HTML> ② 一个html标签对:<html ...

  6. RAMOS系统 WIN7+VHD+GURB map

    转载(并未验证) 前段时间加了一个内存条,将笔记本内存升级到了6G,由于之前用的是32位的win7不可以直接使用6G内存,便装了64位的系统.网上找资源的时候发现,大内存可以使用RamOS,从内存中虚 ...

  7. 创业类网站建设日志1——搭建服务器svn以及前端开发环境

    1.需要在linux环境的服务器下搭建node和npm还有Grunt,所以先需要一个叫putty的工具连接服务器命令行终端 2.双击putty工具,在HostName一栏输入项目服务器地址:172.1 ...

  8. ubuntu 15.10安装搜狗输入法不能打开

    安装Linux是为了更好的做开发,而开发其实不需要输入中文的,然而 在大中国的环境下,电脑没有中文输入法是不行的... 这次装ubuntu 坚持了4天没有中文输入法,我能说,其实没有中文输入法貌似也没 ...

  9. PHP 递归实现层级树状展现数据

    <?php $db = mysql_connect('localhost', 'root', 'root') or die('Can\'t connect to database'); mysq ...

  10. Angular - - ngApp、ngBind、ngBindHtml、ngNonBindable

    对于ng-系列的指令,每篇文章写2-5个吧,不然显得文章好短.... ngApp 使用这个指令自动启动一个AngularJS应用.ngApp指令指定了应用程序的根节点,通常会将ngApp放置在网页的根 ...