利用java实现UDP(二)

振哥哥 振哥哥 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
本帖子接 《利用java实现UDP》这个帖子:
客户端:
UDPClientBean.java

package UDPClient;

import java.io.*;
import java.net.*;

class UDPClientBean{

private DatagramSocket dSocket;
private int ServerPort;
private int ClientPort;
private InetAddress ServerIP;
private InetAddress ClientIP;
private String content;

//无参构造函数
public UDPClientBean() throws SocketException,UnknownHostException {

ServerPort = 1001;
ClientPort =1111;
content = "";
ClientIP = InetAddress.getLocalHost();
ServerIP = InetAddress.getLocalHost();
dSocket = new DatagramSocket(ClientPort);
}
// 信息发送函数
public void sendToServer() throws IOException{
byte[] Buffer = getContent().getBytes(); //将要发送的信息给Buffer变量
DatagramPacket dPacket = new DatagramPacket(Buffer,Buffer.length,getServerIP(),getServerPort());
// 创建DatagramPacket对象dPacket,并指定要发送对象的服务器的IP地址与端口号
dSocket.send(dPacket); // dSocket对象调用send函数发送信息
setContent("");
}
// 信息接收函数
public String receiveFromServer() throws IOException{
byte[] buffer = new byte[1024];
DatagramPacket dPacket = new DatagramPacket(buffer,buffer.length);
// 创建DatagramPacket对象dPacket
dSocket.receive(dPacket); // dSocket对象调用receive函数接收信息
String receive_str = new String(dPacket.getData(),0,dPacket.getLength());
return receive_str; // 返回接收到的信息
}
// 下面都是UDPClientBean类的各个成员变量的get和set方法
public DatagramSocket getdSocket() {
return dSocket;
}

public void setdSocket(DatagramSocket dSocket) {
this.dSocket = dSocket;
}

public int getServerPort() {
return ServerPort;
}

public void setServerPort(int serverPort) {
ServerPort = serverPort;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

public InetAddress getServerIP() {
return ServerIP;
}

public void setServerIP(InetAddress serverIP) {
ServerIP = serverIP;
}

public int getClientPort() {
return ClientPort;
}

public void setClientPort(int clientPort) {
ClientPort = clientPort;
}

public InetAddress getClientIP() {
return ClientIP;
}
public void setClientIP(InetAddress clientIP) {
ClientIP = clientIP;
}
}


UDPClient.java

package UDPClient;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;

public class UDPClient extends JApplet {

private String content;
private UDPClientBean client;

private JTextField jtf_ServerIP = new JTextField(10);
private JTextField jtf_ServerPort = new JTextField(10);
private JTextField jtf_ClientPort = new JTextField(10);

private JButton jbt_Set= new JButton("设置");

private JTextArea jta_ClientShow = new JTextArea();
private JTextArea jta_ClientInput = new JTextArea();

private JButton jbt_Send= new JButton("发送");
private JButton jbt_Exit= new JButton("退出");

public UDPClient(){
JPanel jplClient11 = new JPanel();
jplClient11.setLayout(new GridLayout(3,2));
jplClient11.add(new JLabel("客户端端口:"));
jplClient11.add(jtf_ClientPort);
jplClient11.add(new JLabel("服务器地址:"));
jplClient11.add(jtf_ServerIP);
jplClient11.add(new JLabel("服务器端口:"));
jplClient11.add(jtf_ServerPort);

JPanel jplClient10= new JPanel();
jplClient10.add(jplClient11);
jplClient10.add(jbt_Set);
JPanel jplClient21 = new JPanel();
jplClient21.add(jbt_Send);
jplClient21.add(jbt_Exit);
JPanel jplClient31 = new JPanel();
jplClient31.setLayout(new GridLayout(2,1));
jplClient31.add(new JScrollPane(jta_ClientShow));
jplClient31.add(new JScrollPane(jta_ClientInput));

add(jplClient10,BorderLayout.NORTH);
add(jplClient31,BorderLayout.CENTER);
add(jplClient21,BorderLayout.SOUTH);

// 设置按钮触发事件
jbt_Set.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
try {
client = new UDPClientBean(); //创建UDPClientBean对象
int cliPort = Integer.parseInt(jtf_ClientPort.getText());
//将客户机端口从jtf_ServerPort文本域中取出
client.setClientPort(cliPort); //将取出的cliPort给client对象的ClientPort成员变量
String serIP = jtf_ServerIP.getText(); // 将服务器IP从jtf_ServerIP文本域中取出
int serPort = Integer.parseInt(jtf_ServerPort.getText()); //将服务器端口从jtf_ServerPort文本域中取出
client.setdSocket(new DatagramSocket(client.getClientPort(),client.getClientIP())); // client对象调用setdSocket()函数,创建新Socket对象(此时客户机端口号为设定的端口号)
client.setServerIP(InetAddress.getByName(serIP));
//将取出的serIP给client对象的ServerIP成员变量
client.setServerPort(serPort); //将取出的serPort给client对象的ServerPort成员变量
jta_ClientShow.setText("将信息发送到IP为 "+jtf_ServerIP.getText()+" 端口为 "+jtf_ServerPort.getText()+" 的服务器上。\n"); // 将信息发送的对象的服务器的信息显示在jta_ClientShow区域中
} catch (SocketException e2) {
e2.printStackTrace();
} catch (UnknownHostException e1) {
e1.printStackTrace();
}catch (Exception e1) {
e1.printStackTrace();
}
}
});
// 发送按钮触发事件
jbt_Send.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
client.setContent("");
content = jta_ClientInput.getText(); //取jta_ClientInput文本区域中要发送的信息
client.setContent(content); //将取出的信息给client对对象的content成员变量
jta_ClientShow.setText(jta_ClientShow.getText()+"客户机发送:"+content+"\n"); // 将要发送的信息显示在jta_ClientShow区域框中
jta_ClientInput.setText(null); //将jta_ClientInput文本区域置空
String receive_str = null;
try {
client.sendToServer(); // client对象调用信息发送函数

} catch (IOException e1) {
jta_ClientShow.setText(jta_ClientShow.getText()+"数据发送失败\n");
e1.printStackTrace();
}
try {
receive_str = client.receiveFromServer(); // client对象调用信息接收函数,并将结果返回给receive_str变量
jta_ClientShow.setText(jta_ClientShow.getText()+receive_str+"\n");
// 将收到的信息显示在jta_ClientShow区域框中
} catch (IOException e1) {
jta_ClientShow.setText(jta_ClientShow.getText()+"数据接收失败\n");
e1.printStackTrace();
}
}
});

// 退出按钮触发事件
jbt_Exit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
client.getdSocket().close();
System.exit(0);
}
});
}
}

截图:



现在就是出现点“发送”按钮没有反应的情况,代码貌似很长,其实思想很简单,求大神们耐心看完……
...全文

相关推荐

java利用udp实现发送数据

主要为大家详细介绍了java利用udp实现发送数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

weixin_38750007

服务端基于MINA2的UDP双向通信Demo演示(Java客户端)

本源码是《NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示》一文的Java客户端源码实现,详见:http://www.52im.net/thread-373-1-1.html

JackJiang9999

UDP的Java聊天程序

UDP是OSI参考模型中一种无连接的传输层协议,它提供了简单不可靠的信息传送服务.由于UDP比较简单,UDP头包含很少的字节,所以它在速度方面有很大优势.很多常用的即时通软件,如QQ程序,都会使用UDP实现很多基本功能.Java语言是当今流行的网络编程语言,它的API封装了UDP编程的类,用来实现UDP聊天程序很容易.

renshiyalili

广州大学网络编程实验二代码(UDP编程)

UDP协议在IP协议之上添加的功能虽然非常有限,但UDP通信比面向连接的协议更高效,适合每次发送的数据量小,但发送频繁的通信;UDP数据报首部短小,建立和处理首部信息花费的时间短,适合实时或要求延迟非常低的通信;在UDP通信中,一个数据报可以同时发往多个接收者,适合1对多的通信。通过完成本实验项目,巩固以前所学的面向对象的分析和设计技术,掌握UDP套接字的编程范型,熟悉Java对UDP协议的支持类的编程接口,并能熟练运用于UDP协议应用编程中。

我曾婉拒佘颖欣

用JAVA实现P2P网络通信

分析了P2P基本概念及其基本工作原理,探讨了用JAVA实现p2p网络通信的技术,并用一个实例作了进一步阐述

molihuameirenyu
评论 1
收藏 已收藏
分享
返回顶部
振哥哥
Java SE 62,621 成员 307,251 内容