网络编程-UDP
代码部分--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的更多相关文章
- c/c++ 网络编程 UDP 设定MTU
网络编程 UDP 设定MTU MTU(Maximun Transmisson Unit):一次送信的最大size. 在程序里动态改变MTU.注意:程序运行需要root权限. 程序运行的方法: sudo ...
- c/c++ 网络编程 UDP up/down 网卡
网络编程 UDP up/down 网卡 在程序里动态改变网卡的状态.注意:程序运行需要root权限. 程序运行的方法: sudo ./a.out 1,关闭网卡 #include <stdio.h ...
- c/c++ 网络编程 UDP 改变网关和网卡名字
网络编程 UDP 改变网关和网卡名字 在程序里动态改变网关和网卡名字 1,改变网卡名字 #include <stdio.h> #include <string.h> #incl ...
- c/c++ 网络编程 UDP 改变网卡的硬件地址
网络编程 UDP 改变网卡的硬件地址 在程序里动态改变网卡的硬件地址 1,取得网卡的硬件地址 #include <stdio.h> #include <string.h> #i ...
- c/c++ 网络编程 UDP 改变IP地址
网络编程 UDP 改变IP地址 在程序里动态改变主机的IP地址 1,改变ipv4的地址 #include <stdio.h> #include <string.h> #incl ...
- c/c++ 网络编程 UDP 用if_nameindex和ioctl取得主机网络信息
网络编程 UDP 用if_nameindex和ioctl取得主机网络信息 getifaddrs函数取得的东西太多了,如果只想取得网卡名字和网卡编号可以用下面的2个函数. 1,if_nameindex ...
- c/c++ 网络编程 UDP 主机网络信息取得
网络编程 UDP 主机网络信息取得 1,if_nametoindex 通过网卡名字取得网卡编号 2,if_indextoname 通过网卡编号取得网卡名字 #include <stdio.h&g ...
- c/c++ 网络编程 UDP 发送端 bind 作用
网络编程 UDP 发送端 bind 作用 upd 发送端 调用bind函数的效果:把socket特定到一个指定的端口,如果不调用bind,内核会随机分配一个端口. upd 发送端 调用bind函数的目 ...
- Socket网络编程-UDP编程
Socket网络编程-UDP编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.UDP编程概述 1>.UDP服务端编程流程 创建socket对象.socket.SOCK_ ...
- java 网络编程 UDP TCP
网络编程 网络编程主要用于解决计算机与计算机(手机.平板..)之间的数据传输问题. 网络编程: 不需要基于html页面就可以达到数据之间的传输. 比如: feiQ , QQ , 微信....网页编程: ...
随机推荐
- SynchronizationContext.Post方法 代替
http://www.codeproject.com/KB/threads/SynchronizationContext.aspx看吧,不好,就将就的看下我的吧,呵呵!(没有直接翻译,不过大概的思路相 ...
- 新手如何更换自己喜欢的背景以及此背景的css码
以下内容为转载(对于css码可以自己写当然也可以去网上搜现成的): 更换背景教学:https://jingyan.baidu.com/album/fc07f9897c730412ffe519c0.ht ...
- 五分钟搞懂Vuex
这段时间一直在用vue写项目,vuex在项目中也会依葫芦画瓢使用,但是总有一种朦朦胧胧的感觉.于是决定彻底搞懂它. 看了一下午的官方文档,以及资料,才发现vuex so easy! 作为一个圈子中的人 ...
- GET和POST本质上有什么区别,这才是标准答案
不知道各位读者在面试的时候,有没有被问过这个问题:"请说一下GET和POST两者的本质区别".基本上做过WEB开发的,对这个问题,都可以回答出一堆的区别. 比如: 最直接的区别,G ...
- [POJ2187][BZOJ1069]旋转卡壳
旋转卡壳 到现在依然不确定要怎么读... 以最远点对问题为例,枚举凸包上的两个点是最简单的想法,时间复杂度O(n2) 我们想象用两条平行线卡着这个凸包,当其中一个向某个方向旋转的时候另一个显然也是朝同 ...
- bzoj 1088 DP
我们可以用w[i][s]来表示到第i位的方案,s代表第i位和第i+1位是否有雷的二进制串,那么我们就可以根据每一位的雷的数量转移了. /******************************** ...
- bzoj 1588 裸平衡树
//By BLADEVIL #include <cstdio> #include <set> #define inf 1<<30 using namespace s ...
- ie8以上及非ie8情况下的写法
<!-- [if gt ie 8]> <!--> <script src="no-ie8.js"></script> <!- ...
- HDU1217 (Floyd简单变形)
Arbitrage Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- I2C和SPI总线对比【转】
转自:http://blog.csdn.net/skyflying2012/article/details/8237881/ 最近2周一直在调试IIC和SPI总线设备,这里记录一下2种总线,以备后忘. ...