代码部分--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. SynchronizationContext.Post方法 代替

    http://www.codeproject.com/KB/threads/SynchronizationContext.aspx看吧,不好,就将就的看下我的吧,呵呵!(没有直接翻译,不过大概的思路相 ...

  2. 新手如何更换自己喜欢的背景以及此背景的css码

    以下内容为转载(对于css码可以自己写当然也可以去网上搜现成的): 更换背景教学:https://jingyan.baidu.com/album/fc07f9897c730412ffe519c0.ht ...

  3. 五分钟搞懂Vuex

    这段时间一直在用vue写项目,vuex在项目中也会依葫芦画瓢使用,但是总有一种朦朦胧胧的感觉.于是决定彻底搞懂它. 看了一下午的官方文档,以及资料,才发现vuex so easy! 作为一个圈子中的人 ...

  4. GET和POST本质上有什么区别,这才是标准答案

    不知道各位读者在面试的时候,有没有被问过这个问题:"请说一下GET和POST两者的本质区别".基本上做过WEB开发的,对这个问题,都可以回答出一堆的区别. 比如: 最直接的区别,G ...

  5. [POJ2187][BZOJ1069]旋转卡壳

    旋转卡壳 到现在依然不确定要怎么读... 以最远点对问题为例,枚举凸包上的两个点是最简单的想法,时间复杂度O(n2) 我们想象用两条平行线卡着这个凸包,当其中一个向某个方向旋转的时候另一个显然也是朝同 ...

  6. bzoj 1088 DP

    我们可以用w[i][s]来表示到第i位的方案,s代表第i位和第i+1位是否有雷的二进制串,那么我们就可以根据每一位的雷的数量转移了. /******************************** ...

  7. bzoj 1588 裸平衡树

    //By BLADEVIL #include <cstdio> #include <set> #define inf 1<<30 using namespace s ...

  8. ie8以上及非ie8情况下的写法

    <!-- [if gt ie 8]> <!--> <script src="no-ie8.js"></script>  <!- ...

  9. HDU1217 (Floyd简单变形)

    Arbitrage Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

  10. I2C和SPI总线对比【转】

    转自:http://blog.csdn.net/skyflying2012/article/details/8237881/ 最近2周一直在调试IIC和SPI总线设备,这里记录一下2种总线,以备后忘. ...