代码部分--UDP传输

* 1.发送Send

* 创建DatagramSocket, 随机端口号

* 创建DatagramPacket, 指定数据, 长度, 地址, 端口

* 使用DatagramSocket发送DatagramPacket

* 关闭DatagramSocket

package demo1;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException; public class Test_send {
/** 1.发送Send
* 创建DatagramSocket, 随机端口号
* 创建DatagramPacket, 指定数据, 长度, 地址, 端口
* 使用DatagramSocket发送DatagramPacket
* 关闭DatagramSocket
* @throws SocketException */
public static void main(String[] args) throws Exception {
//定义要传输的字符串
String str="hahhah";
//创建socket
DatagramSocket socket=new DatagramSocket();
//创建packet()
DatagramPacket packet =new DatagramPacket(str.getBytes(),
str.getBytes().length,InetAddress.getByName("127.0.0.1"),6666);
//发送数据
socket.send(packet);
//关闭socket
socket.close(); }
}

* 2.接收Receive

* 创建DatagramSocket, 指定端口号

* 创建DatagramPacket, 指定数组, 长度

* 使用DatagramSocket接收DatagramPacket

* 关闭DatagramSocket

* 从DatagramPacket中获取数据

package demo1;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException; public class Test_receiver {
/** 创建DatagramSocket, 指定端口号
* 创建DatagramPacket, 指定数组, 长度
* 使用DatagramSocket接收DatagramPacket
* 关闭DatagramSocket
* 从DatagramPacket中获取数据
* @throws Exception */ public static void main(String[] args) throws Exception {
//创建socket相当有码头
DatagramSocket socket=new DatagramSocket(6666);
//创建packet相当于集装箱
DatagramPacket packet=new DatagramPacket(new byte[1024],1024);
//获取数据
socket.receive(packet);
//关闭socket
socket.close();
//从packet中取出数据
byte[] data=packet.getData();
System.out.println(new String(data,0,packet.getLength())); }
}

UDP传输优化(不断的发送,接收)

package demo1;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner; public class Test_send {
/**
* 1.发送Send 创建DatagramSocket, 随机端口号 创建DatagramPacket, 指定数据, 长度, 地址, 端口
* 使用DatagramSocket发送DatagramPacket 关闭DatagramSocket
*
* @throws SocketException
*/
public static void main(String[] args) throws Exception {
Scanner in = new Scanner(System.in);
// 创建socket
DatagramSocket socket = new DatagramSocket();
while (true) {
String line = in.nextLine();
if ("quit".equals(line)) {
break;
} else {
// 创建packet()
DatagramPacket packet = new DatagramPacket(line.getBytes(),
line.getBytes().length,
InetAddress.getByName("127.0.0.1"), 6666);
// 发送数据
socket.send(packet);
}
}
// 关闭socket
socket.close(); }
}
package demo1;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException; public class Test_receiver {
/** 创建DatagramSocket, 指定端口号
* 创建DatagramPacket, 指定数组, 长度
* 使用DatagramSocket接收DatagramPacket
* 关闭DatagramSocket
* 从DatagramPacket中获取数据
* @throws Exception */ public static void main(String[] args) throws Exception {
//创建socket相当有码头
DatagramSocket socket=new DatagramSocket(6666);
//创建packet相当于集装箱
DatagramPacket packet=new DatagramPacket(new byte[1024],1024);
while(true)
{
//获取数据
socket.receive(packet);
//从packet中取出数据
byte[] data=packet.getData();
//获取ip
String ip=packet.getAddress().getHostAddress();
System.out.println("ip:"+ip+" :"+new String(data,0,packet.getLength()));
} }
}

* 3.接收方获取ip和端口号

* String ip = packet.getAddress().getHostAddress();

* int port = packet.getPort();

UDP传输优化(多线程)

package demo1;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner; public class Test_send {
/**
* 1.发送Send 创建DatagramSocket, 随机端口号 创建DatagramPacket, 指定数据, 长度, 地址, 端口
* 使用DatagramSocket发送DatagramPacket 关闭DatagramSocket
*
* @throws SocketException
*/
public static void main(String[] args) throws Exception {
new Receive().start();
new Send().start();
}
} class Send extends Thread
{
public void run()
{
try {
Scanner in = new Scanner(System.in);
// 创建socket
DatagramSocket socket; socket = new DatagramSocket(); while (true) {
String line = in.nextLine();
if ("quit".equals(line)) {
break;
} else {
// 创建packet()
DatagramPacket packet = new DatagramPacket(line.getBytes(),
line.getBytes().length,
InetAddress.getByName("127.0.0.1"), 9999);
// 发送数据
socket.send(packet);
}
}
// 关闭socket
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} class Receive extends Thread
{
public void run()
{ try {
//创建socket相当有码头
DatagramSocket socket=new DatagramSocket(9999);
//创建packet相当于集装箱
DatagramPacket packet=new DatagramPacket(new byte[1024],1024);
while(true)
{
//获取数据
socket.receive(packet);
//从packet中取出数据
byte[] data=packet.getData();
//获取ip
String ip=packet.getAddress().getHostAddress();
System.out.println("ip:"+ip+" :"+new String(data,0,packet.getLength()));
}
}catch (IOException e) {
e.printStackTrace();
}
}
}

UDP优化-GUI界面聊天(显示+关闭+发送)

界面

代码实现

package demo2;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.text.SimpleDateFormat;
import java.util.Date; public class GUIDemo extends Frame {
TextField ip;
Button send;
Button log;
Button clear;
Button shake;
TextArea show;
TextArea edit;
DatagramSocket socket; /**
* 窗体的初始化
*/
public GUIDemo() {
// 基本控件的初始化
init();
try {
socket = new DatagramSocket();
} catch (SocketException e) {
e.printStackTrace();
}
// 南边panel的初始化
sourceMade();
// 中间panel的初始化
centerMade();
// 事件添加
event();
} /**
* 中间panel构建
*/
public void centerMade() {
Panel center = new Panel();
center.setLayout(new BorderLayout());
show = new TextArea();
show.setEditable(false);
show.setFont(new Font("xxx", Font.PLAIN, 15));
edit = new TextArea();
edit.setFont(new Font("xxx", Font.PLAIN, 15));
center.add(show, BorderLayout.CENTER);
center.add(edit, BorderLayout.SOUTH);
this.add(center, BorderLayout.CENTER); } /**
* 南边窗体初始化
*/
public void sourceMade() {
Panel source = new Panel();
ip = new TextField(15);
ip.setText("127.0.0.1");
send = new Button("发送");
log = new Button("记录");
clear = new Button("清屏");
shake = new Button("震动");
source.add(ip);
source.add(send);
source.add(log);
source.add(clear);
source.add(shake);
this.add(source, BorderLayout.SOUTH);
} public void init() {
this.setLocation(500, 500);
this.setSize(400, 600);
new Receive().start();
this.setVisible(true);
} public void event() {
// 关闭窗体事件
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
socket.close();
System.exit(0);
}
}); // 发送事件
send.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
try {
send();
} catch (IOException e1) {
e1.printStackTrace();
}
} }); // 记录事件 // 清屏事件 // 震动事件 } public void send() throws IOException { String message = edit.getText();
String host = ip.getText();
DatagramPacket packet = new DatagramPacket(message.getBytes(),
message.getBytes().length, InetAddress.getByName(host), 9999);
socket.send(packet); String time = getCurrentTime();
show.append(time + "我对" + host + "说:\r\n" + message + "\r\n\r\n");
edit.setText("");
} private String getCurrentTime() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
return sdf.format(date);
} public static void main(String[] args) {
GUIDemo demo = new GUIDemo();
} private class Receive extends Thread {
public void run() {
try {
DatagramSocket socket = new DatagramSocket(9999);
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
while (true) {
socket.receive(packet);
String message = new String(packet.getData(), 0,
packet.getLength());
String time = getCurrentTime();
String ipstr = packet.getAddress().getHostAddress();
show.append(time + " " + ipstr + " 对我说:\r\n" + message
+ "\r\n\r\n");
}
} catch (Exception e) {
e.printStackTrace();
} }
} }

UDP优化-GUI界面聊天(记录+清屏+震动)

清屏

        clear.addActionListener(new ActionListener() {

            @Override
public void actionPerformed(ActionEvent e) {
show.setText("");
} });

记录

// 记录事件
log.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
try {
logFile();
} catch (Exception e1) {
e1.printStackTrace();
}
} });
public void logFile() throws Exception {
bw.flush();
//获取输入流
FileInputStream fis=new FileInputStream("src/log.txt");
//创建缓冲区
ByteArrayOutputStream baos=new ByteArrayOutputStream();
int len;
byte arr[]=new byte[8192];
while((len=fis.read(arr))!=-1)
{
baos.write(arr,0,len);
}
String str=baos.toString();
show.setText(str); }

震动

        // 震动事件
shake.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
try {
send(new byte[]{-1},ip.getText());
} catch (Exception e1) {
e1.printStackTrace();
}
}
});
    public void shake() {
int x=getLocation().x;
int y=getLocation().y;
for(int i=0;i<3;i++)
{
try {
this.setLocation(x+10,y+10);
Thread.sleep(20);
this.setLocation(x+10,y-10);
Thread.sleep(20);
this.setLocation(x-10,y+10);
Thread.sleep(20);
this.setLocation(x-10,y-10);
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.setLocation(x,y);
}

UDP优化-GUI界面聊天(快捷键)

//快捷键发送
edit.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
//CTRL+回车====》发送信息
if(e.getKeyChar()==KeyEvent.VK_ENTER && e.isControlDown())
{
try {
send();
} catch (IOException e1) {
e1.printStackTrace();
}
}
} });

UDP优化-GUI界面聊天(代码优化)

    public void send() throws IOException {

        String message = edit.getText();
String host = ip.getText();
host=((host.trim().length()==0)?"255.255.255.255":host);
DatagramPacket packet = new DatagramPacket(message.getBytes(),
message.getBytes().length, InetAddress.getByName(host), 9999);
socket.send(packet); String time = getCurrentTime();
host=(("255.255.255.255").equals(host)?"所有人":host);
String str = time + "我对" + host + "说:\r\n" + message + "\r\n\r\n";
show.append(str);
bw.append(str);
edit.setText("");
}

完整代码

package demo2;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Date; public class GUIDemo extends Frame {
TextField ip;
Button send;
Button log;
Button clear;
Button shake;
TextArea show;
TextArea edit;
DatagramSocket socket;
BufferedWriter bw; /**
* 窗体的初始化
*/
public GUIDemo() {
// 基本控件的初始化
init();
try {
socket = new DatagramSocket();
bw=new BufferedWriter(new FileWriter("src/log.txt",true));
} catch (Exception e) {
e.printStackTrace();
}
// 南边panel的初始化
sourceMade();
// 中间panel的初始化
centerMade();
// 事件添加
event();
} /**
* 中间panel构建
*/
public void centerMade() {
Panel center = new Panel();
center.setLayout(new BorderLayout());
show = new TextArea();
show.setEditable(false);
show.setFont(new Font("xxx", Font.PLAIN, 15));
edit = new TextArea();
edit.setFont(new Font("xxx", Font.PLAIN, 15));
center.add(show, BorderLayout.CENTER);
center.add(edit, BorderLayout.SOUTH);
this.add(center, BorderLayout.CENTER); } /**
* 南边窗体初始化
*/
public void sourceMade() {
Panel source = new Panel();
ip = new TextField(15);
ip.setText("192.168.28.1");
send = new Button("发送");
log = new Button("记录");
clear = new Button("清屏");
shake = new Button("震动");
source.add(ip);
source.add(send);
source.add(log);
source.add(clear);
source.add(shake);
this.add(source, BorderLayout.SOUTH);
} public void init() {
this.setLocation(500, 500);
this.setSize(400, 600);
new Receive().start();
this.setVisible(true);
} public void event() {
// 关闭窗体事件
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
socket.close();
System.exit(0);
}
}); // 发送事件
send.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
try {
send();
} catch (IOException e1) {
e1.printStackTrace();
}
} }); // 记录事件
log.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
try {
logFile();
} catch (Exception e1) {
e1.printStackTrace();
}
} }); // 清屏事件
clear.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
show.setText("");
} }); // 震动事件
shake.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
try {
send(new byte[]{-1},ip.getText());
} catch (Exception e1) {
e1.printStackTrace();
}
}
});
//快捷键发送
edit.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
//CTRL+回车====》发送信息
if(e.getKeyChar()==KeyEvent.VK_ENTER && e.isControlDown())
{
try {
send();
} catch (IOException e1) {
e1.printStackTrace();
}
}
} });
} public void logFile() throws Exception {
bw.flush();
//获取输入流
FileInputStream fis=new FileInputStream("src/log.txt");
//创建缓冲区
ByteArrayOutputStream baos=new ByteArrayOutputStream();
int len;
byte arr[]=new byte[8192];
while((len=fis.read(arr))!=-1)
{
baos.write(arr,0,len);
}
String str=baos.toString();
show.setText(str); } public void shake() {
int x=getLocation().x;
int y=getLocation().y;
for(int i=0;i<3;i++)
{
try {
this.setLocation(x+10,y+10);
Thread.sleep(20);
this.setLocation(x+10,y-10);
Thread.sleep(20);
this.setLocation(x-10,y+10);
Thread.sleep(20);
this.setLocation(x-10,y-10);
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.setLocation(x,y);
} public void send(byte[] arr,String ip) throws IOException {
DatagramPacket packet = new DatagramPacket(arr,
arr.length, InetAddress.getByName(ip), 9999);
socket.send(packet); } public void send() throws IOException { String message = edit.getText();
String host = ip.getText();
host=((host.trim().length()==0)?"255.255.255.255":host);
DatagramPacket packet = new DatagramPacket(message.getBytes(),
message.getBytes().length, InetAddress.getByName(host), 9999);
socket.send(packet); String time = getCurrentTime();
host=(("255.255.255.255").equals(host)?"所有人":host);
String str = time + "我对" + host + "说:\r\n" + message + "\r\n\r\n";
show.append(str);
bw.append(str);
edit.setText("");
} private String getCurrentTime() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
return sdf.format(date);
} public static void main(String[] args) {
GUIDemo demo = new GUIDemo();
} private class Receive extends Thread {
public void run() {
try {
DatagramSocket socket = new DatagramSocket(9999);
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
while (true) {
socket.receive(packet);
String message = new String(packet.getData(), 0,
packet.getLength());
if(packet.getData()[0]==-1&&packet.getLength()==1)
{
shake();
continue;
} String time = getCurrentTime();
String ipstr = packet.getAddress().getHostAddress();
String str = time + " " + ipstr + " 对我说:\r\n" + message
+ "\r\n\r\n";
show.append(str);
bw.append(str);
}
} catch (Exception e) {
e.printStackTrace();
} }
} }

最终界面

封装双击可运行jar包

(1)选中涉及到的java文件

(2)右击,导出

(3)JavFile

(4)next(选择保存路径)

(5)next--next--(选取main所在类)

(6)finash

网络编程-UDP的更多相关文章

  1. c/c++ 网络编程 UDP 设定MTU

    网络编程 UDP 设定MTU MTU(Maximun Transmisson Unit):一次送信的最大size. 在程序里动态改变MTU.注意:程序运行需要root权限. 程序运行的方法: sudo ...

  2. c/c++ 网络编程 UDP up/down 网卡

    网络编程 UDP up/down 网卡 在程序里动态改变网卡的状态.注意:程序运行需要root权限. 程序运行的方法: sudo ./a.out 1,关闭网卡 #include <stdio.h ...

  3. c/c++ 网络编程 UDP 改变网关和网卡名字

    网络编程 UDP 改变网关和网卡名字 在程序里动态改变网关和网卡名字 1,改变网卡名字 #include <stdio.h> #include <string.h> #incl ...

  4. c/c++ 网络编程 UDP 改变网卡的硬件地址

    网络编程 UDP 改变网卡的硬件地址 在程序里动态改变网卡的硬件地址 1,取得网卡的硬件地址 #include <stdio.h> #include <string.h> #i ...

  5. c/c++ 网络编程 UDP 改变IP地址

    网络编程 UDP 改变IP地址 在程序里动态改变主机的IP地址 1,改变ipv4的地址 #include <stdio.h> #include <string.h> #incl ...

  6. c/c++ 网络编程 UDP 用if_nameindex和ioctl取得主机网络信息

    网络编程 UDP 用if_nameindex和ioctl取得主机网络信息 getifaddrs函数取得的东西太多了,如果只想取得网卡名字和网卡编号可以用下面的2个函数. 1,if_nameindex ...

  7. c/c++ 网络编程 UDP 主机网络信息取得

    网络编程 UDP 主机网络信息取得 1,if_nametoindex 通过网卡名字取得网卡编号 2,if_indextoname 通过网卡编号取得网卡名字 #include <stdio.h&g ...

  8. c/c++ 网络编程 UDP 发送端 bind 作用

    网络编程 UDP 发送端 bind 作用 upd 发送端 调用bind函数的效果:把socket特定到一个指定的端口,如果不调用bind,内核会随机分配一个端口. upd 发送端 调用bind函数的目 ...

  9. Socket网络编程-UDP编程

    Socket网络编程-UDP编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.UDP编程概述 1>.UDP服务端编程流程 创建socket对象.socket.SOCK_ ...

  10. java 网络编程 UDP TCP

    网络编程 网络编程主要用于解决计算机与计算机(手机.平板..)之间的数据传输问题. 网络编程: 不需要基于html页面就可以达到数据之间的传输. 比如: feiQ , QQ , 微信....网页编程: ...

随机推荐

  1. 解决在ios下不能自动播放音频的问题

    在ios下面是不允许自动播放音频这个操作的,不过我们可以使用微信提供的sdk来做到自动播放音乐的功能 wx.ready(()=>{}) 引入微信的sdk,之后在回调函数里面执行主动触发背景音乐播 ...

  2. Maven环境搭建、调试、打包

    1.配置Maven环境 将下载文件解压,然后设置maven环境 新建环境变量M2_HOME 变量名:M2_HOME 变量值:F:\maven\apache-maven-3.0.3 追加path环境变量 ...

  3. centos7.6升级ssh7.9、安装PHP7.2、Nginx1.15.9、PHP加密扩展php_screw1.5

    1.centos7 安装PHP7.2版本 #查询是否安装过php yum list installed | grep php yum provides php #移除php yum remove ph ...

  4. c语言指针学习【转】

    前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水, ...

  5. CF502C The Phone Number

    C. The Phone Number time limit per test 1 second memory limit per test 256 megabytes     Mrs. Smith ...

  6. [BZOJ1005]Prufer数列+排列组合

    一棵树的Prufer数列 每次在剩下的树中找到标号最小的叶子节点(对于无根树而言即是度数为1的节点),删去. 同时将其父节点(即与其相连的唯一点)加入Prufer数列当中. 一个Prufer数列所对应 ...

  7. 【洛谷 P3805】 【模板】manacher算法

    题目链接 manacher算法:在线性时间内求一个字符串中所有/最长回文串的算法. 先来考虑一下暴力的算法,枚举每个中点,向两边扩展,时间复杂度\(O(n^2)\). 来分析下此算法的缺点. 1.因为 ...

  8. bzoj 1861 splay

    就是裸地splay,然后自己写的不是特别好,tle了,最近时间比较紧迫,有时间了改下,在此记录 另附转载pascal AC代码最下面 /******************************** ...

  9. ARM 中断状态和SVC状态的堆栈切换 (异常)【转】

    转自:http://blog.csdn.net/edwardlulinux/article/details/9261393 版权声明:本文为博主原创文章,未经博主允许不得转载. ARM 中断状态和SV ...

  10. libssh2

    http://www.cnblogs.com/lzrabbit/p/4298794.html shell脚本实现ssh自动登录远程服务器示例: #!/usr/bin/expect spawn ssh ...