java UDP 通信

那位高手可以帮小弟改一下以下程序,只实现传送简单的数据包,谢谢!

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


class UDPCommunicationServer extends Frame {
private Label label1, label2;
private Panel panel1, panel2;
private TextField textfield;
private String name, name1;
private TextArea textarea;
private DatagramSocket sendSocket, receiveSocket;
private DatagramPacket sendPacket, receivePacket;

public UDPCommunicationServer() {
super("通信控制台:");
panel1 = new Panel();
panel1.setLayout(new BorderLayout());
label1 = new Label("通话记录");
textarea = new TextArea(10, 20);
textarea.setText("欢迎你!");
panel1.add("North", label1);
panel1.add("Center", textarea);
add("North", panel1);
panel2 = new Panel();
panel2.setLayout(new BorderLayout());
label2 = new Label("发言:");
panel2.add("Center", label2);
textfield = new TextField(20);
panel2.add("South", textfield);
add("Center", panel2);
setVisible(true);
try {
sendSocket = new DatagramSocket();
receiveSocket = new DatagramSocket(5000);
} catch (SocketException e) {
e.printStackTrace();
System.exit(1);
}
}

public void waitForPacket() {
while (true) {
try {
byte[] buf = new byte[100];
receivePacket = new DatagramPacket(buf, buf.length);
receiveSocket.receive(receivePacket);
name = receivePacket.getAddress().toString();
if (name1 != name) {
textarea.append("\n来自主机:" + name + "\n端口:"
+ receivePacket.getPort());
}
textarea.append("\n客户:");
byte[] data = receivePacket.getData();
String receivedString = new String(data);
textarea.append(receivedString);
name1 = name;
} catch (IOException e) {
textarea.append("\n网络通信出现错误,问题在" + e.toString());
}
}
}

public void processEvent(AWTEvent e) {
if (e.getID() == Event.WINDOW_DESTROY) {
setVisible(false);
dispose();
System.exit(0);
}
super.processEvent(e);
}

public boolean action(Event e, Object o) {
try {
textarea.append("\n服务器:");
String string = o.toString();
textarea.append(string);
byte[] databyte = new byte[100];
databyte = string.getBytes();
sendPacket = new DatagramPacket(databyte, string.length(),
InetAddress.getByName(name), 5001);
sendSocket.send(sendPacket);
} catch (IOException ioe) {
textarea.append("网络通信出现错误,问题在" + ioe.toString());
}
return true;
}
}

public class UDPServer {
public static void main(String[] args) {
UDPCommunicationServer cs = new UDPCommunicationServer();
// cs.setVisible(true);
cs.waitForPacket();

}
}


import java.net.*;
import java.io.*;
import java.awt.*;
import java.applet.*;
public final class Client extends Applet{
private Label label1,label2;
private Panel panel1,panel2;
private TextField textfield;
private TextArea textarea;
private DatagramSocket sendSocket,receiveSocket;
private DatagramPacket sendPacket,receivePacket;
public void init(){
setBackground(Color.gray);
setLayout(new BorderLayout());
panel1=new Panel();
panel1.setLayout(new BorderLayout());
label1=new Label("通话记录");
textarea=new TextArea(10,20);
textarea.setText("欢迎你!");
panel1.add("North",label1);
panel1.add("Center",textarea);
add("North",panel1);
label2=new Label("发言:");
panel2=new Panel();
panel2.add("Center",label2);
textfield=new TextField(20);
textfield.setText("");
panel2.add("South",textfield);
add("Center",panel2);
setVisible(true);
}
public void start(){
waitForPackets();
}
public void waitForPackets(){
try{
sendSocket=new DatagramSocket();
receiveSocket=new DatagramSocket(5001);
}catch(SocketException e){
textarea.append("不能打开数据报Socket,或数据报Socket无法与指定端口连接!");
}
while(true){
try{
byte []buf=new byte[100];
receivePacket=new DatagramPacket(buf,buf.length);
receiveSocket.receive(receivePacket);
textarea.append("\n服务器:");
byte[]data=receivePacket.getData();
String receivedString=new String(data);
textarea.append(receivedString);
}catch (IOException e){
textarea.append("\n网络通信出现错误,问题在"+e.toString());
}
}
}
public boolean action(Event e,Object o){
try{
textarea.append("\n客户端:");
String string=o.toString();
textarea.append(string);
byte[]databyte=new byte[100];
databyte=string.getBytes();
sendPacket=new DatagramPacket(
databyte,string.length(),InetAddress.getByName("localhost"),5000);
sendSocket.send(sendPacket);
}catch(IOException ioe){
textarea.append("网络通信出现错误,问题在"+ioe.toString());
}
return true;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java UDP通信编程的源码如下: ```java import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPClient { public static void main(String[] args) { try { // 创建UDP套接字 DatagramSocket clientSocket = new DatagramSocket(); // 设置服务器的IP地址和端口号 InetAddress serverIP = InetAddress.getByName("127.0.0.1"); int serverPort = 9999; // 将消息转换成字节数组 String message = "Hello, Server!"; byte[] sendData = message.getBytes(); // 创建UDP数据包 DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverIP, serverPort); // 发送数据包到服务器 clientSocket.send(sendPacket); System.out.println("发送消息到服务器: " + message); // 接收来自服务器的响应 byte[] receiveData = new byte[1024]; DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); // 将接收到的字节数组转换成字符串 String response = new String(receivePacket.getData()); System.out.println("接收到来自服务器的响应: " + response.trim()); // 关闭UDP套接字 clientSocket.close(); } catch (Exception e) { e.printStackTrace(); } } } import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPServer { public static void main(String[] args) { try { // 创建UDP套接字并绑定端口号 DatagramSocket serverSocket = new DatagramSocket(9999); System.out.println("服务器已启动,等待客户端消息..."); while (true) { // 创建接收数据包 byte[] receiveData = new byte[1024]; DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); // 接收客户端消息 serverSocket.receive(receivePacket); // 将接收到的字节数组转换成字符串 String message = new String(receivePacket.getData()).trim(); System.out.println("接收到客户端消息: " + message); // 获取客户端IP地址和端口号 InetAddress clientIP = receivePacket.getAddress(); int clientPort = receivePacket.getPort(); // 准备响应消息 String response = "Hello, Client!"; byte[] sendData = response.getBytes(); // 创建发送数据包 DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientIP, clientPort); // 发送响应消息到客户端 serverSocket.send(sendPacket); System.out.println("发送响应消息到客户端: " + response); } } catch (Exception e) { e.printStackTrace(); } } } ``` 以上代码展示了一个简单的Java UDP通信的例子。其中UDPClient类代表客户端,UDPServer类代表服务器端。客户端通过DatagramSocket发送消息到服务器端,服务器端接收到消息后进行处理,并将响应消息发送回客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值