62,615
社区成员
发帖
与我相关
我的任务
分享
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;
}
}
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);
}
});
}
}