⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 receive.java

📁 模拟停止等待ARQ协议,网络课的重要实验,采用APPLET UDP传输!
💻 JAVA
字号:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.math.*;
import java.applet.*;
import java.net.*;

public class receive extends JApplet implements ActionListener,Runnable
{
	/**组件*/
	JPanel npanel,pp;
	JScrollPane cpanel;
	JButton b2;
	JLabel lb;
	JTextArea ta;
	JTextField tf,ttt;
	Thread thread;
	/**网络*/
	/**变量*/
	public void init()
	{
		try
		{
			jbInit();
		}
		catch(Exception ee)
		{
			ee.printStackTrace();
		}
	}
	public void jbInit()throws Exception
	{
		npanel=new JPanel(new GridLayout(2,1));
		pp=new JPanel();
		b2=new JButton("发送数据");
		lb=new JLabel("发送数据帧:");
		tf=new JTextField(10);
		ta=new JTextArea(15,40);
		pp.add(lb);
		pp.add(tf);
		pp.add(b2);
		cpanel=new JScrollPane(ta);
		ttt=new JTextField(20);
		setLayout(new BorderLayout());
		npanel.add(pp);
		npanel.add(ttt);
		add(npanel,BorderLayout.NORTH);
		add(cpanel,BorderLayout.CENTER);
		b2.addActionListener(this);
		/****************************************/
		thread=new Thread(this);
		thread.start();
		
	}	
	public void actionPerformed(ActionEvent e)
	{
		Object ar=e.getSource();
		if(ar==b2)
		{
			byte b[]=tf.getText().trim().getBytes();
			try
			{
				InetAddress address=InetAddress.getByName("127.0.0.1");
				DatagramPacket data=new DatagramPacket(b,b.length,address,5678);
				DatagramSocket mail=new DatagramSocket();
				mail.send(data);
				String msg=new String(data.getData(),0,data.getLength());
				ta.append("已发送"+msg+"\n");
				
			}
			catch(Exception eee){
			}
			
		}
	}
	public void run()
	{
		DatagramPacket pack=null;
		DatagramSocket mail=null;
		byte b[]=new byte[8192];
		try{
			pack=new DatagramPacket(b,b.length);
			mail=new DatagramSocket(1234);
		}
		catch(Exception e){}
		while(true)
		{
			try{
				mail.receive(pack);
				String message=new String(pack.getData(),0,pack.getLength());
				thread.sleep(1000);
				ta.append("收到数据来自:"+pack.getAddress());
				String str1=ran();
				tf.setText(str1);
				thread.sleep(1000);
				if(str1.equals("ACK"))
				{
					ta.append("\n 收到数据是:"+message+"\n");
					ta.setCaretPosition(ta.getText().length());
					ta.append("已发送数据帧ACK");
					new AboutDialog();
					ttt.setText("本次接受的数据为:"+message);
				}
				else if(str1.equals("NAK"))
				{
					ta.append("\n 数据接收出错,请求重传 \n");
					ta.setCaretPosition(ta.getText().length());
					ta.append("已发送数据帧NAK");
				}
				else if(str1.equals(""))
				{
					ta.append("\n 未接受到数据 \n");
					ta.setCaretPosition(ta.getText().length());
				}
				byte d[]=tf.getText().trim().getBytes();
				try
				{
					InetAddress address=InetAddress.getByName("127.0.0.1");
					DatagramPacket data=new DatagramPacket(d,d.length,address,5678);
					DatagramSocket m=new DatagramSocket();
					m.send(data);
					String msg=new String(data.getData(),0,data.getLength());		
				}
			catch(Exception eee){
			}
				
			}
			catch(Exception ee){
			}
		}
	}
	public String ran()
    {
       double b;
       String str="ACK";
       b=Math.random();
       if(b<=0.5)
       {
       	str="ACK";
       }
       else if(b>0.5&&b<=0.75)
       {
       	str="NAK";
       }
       else if(b>0.75&&b<1.0)
       {
       	str="";
       }
       return str;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -