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;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值