利用UDP通信

来源:互联网 发布:免费商城源码 编辑:程序博客网 时间:2024/05/29 07:36

package UDP通信;

/*主机1程序*/

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Machine extends JFrame implements ActionListener ,Runnable{
JTextField textField;
JTextArea textArea;
JScrollPane scrollpane;
JButton sendButton;
int receivePort;
int sendPort;
Machine(String name,int receivePort,int sendPort){
super(name);
setSize(350,210);
this.sendPort=sendPort;
this.receivePort=receivePort;
textField=new JTextField(20);
sendButton=new JButton("发送");
   JPanel northPanel=new JPanel();
   northPanel.add(textField);
   northPanel.add(sendButton);
   add(northPanel,BorderLayout.NORTH);
   textArea=new JTextArea(5,30);
   JScrollPane scrollpane=new JScrollPane(textArea);
   add(scrollpane,BorderLayout.CENTER);
   sendButton.addActionListener(this);


}
public void actionPerformed(ActionEvent e){
byte buffer[]=textField.getText().trim().getBytes();
try{
InetAddress address=InetAddress.getByName("127.0.0.1");
DatagramPacket dataPack=new DatagramPacket(buffer,buffer.length,address,sendPort);
//构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号
DatagramSocket dataSock=new DatagramSocket(); //表示用来发送和接收数据报包的套接字。
dataSock.send(dataPack);  //从此套接字发送数据报包dataPack
}catch(Exception ex){
ex.printStackTrace();
}
}
public void listen(){
Thread thread=new Thread(this);
thread.start();
}
public void run(){
DatagramPacket pack=null;
DatagramSocket receiveData=null;
String message=null;
byte data[]=new byte[1024];

pack =new DatagramPacket(data,data.length);//构造 DatagramPacket,用来接收长度为 length 的数据包
try{
receiveData=new DatagramSocket(receivePort);//创建数据报套接字并将其绑定到本地主机上的指定端口。
while(true){
receiveData.receive(pack);//从此套接字接收数据报包pack。
message=new String(pack.getData(),0,pack.getLength());
textArea.append("收到的数据是 :    "+message+"\n");
}
}catch(SocketException e){
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
        Machine frame=new Machine("主机1",6666,8888);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.listen();


}


}

/*主机2程序*/

package UDP通信;
import javax.swing.*;
public class Machine2 {
public static void main(String[] args) {
Machine frame=new Machine("主机2",8888,6666);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.listen();
}


}


原创粉丝点击