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

📄 transmitter.java

📁 经典的传教士过河问题的java swt实现
💻 JAVA
字号:
package server;

import java.net.*;
import java.util.*;
import java.net.*;
import java.io.*;
import fishinfo.FishInfo;

public class Transmitter extends Thread {
     private DatagramPacket packet;
     private DatagramSocket socket;
     byte[] recvBuf = new byte[500];
     FishInfo  fishinfo;
     InetAddress dest_inet;
     boolean running;
     int i;

     public Transmitter(){
       start();
       }
     public void start()
     {
      running = true;
      try{
      socket = new DatagramSocket(5003);
      }catch(SocketException e)
      {e.printStackTrace();}
      super.start();
     }
     public void run()
     {
     while(running)
     {
     try{
       //创建udp包以接受数据。
       packet = new DatagramPacket(recvBuf,recvBuf.length);

       //创建接受方的udp端口以接收数据

        socket.receive(packet);

        ByteArrayInputStream byteStream = new
                           ByteArrayInputStream(recvBuf);
        ObjectInputStream is = new ObjectInputStream(new
                           BufferedInputStream(byteStream));
        Object o = is.readObject();
        fishinfo = (FishInfo)o;
        System.out.println(o);
        is.close();
        InetAddress inet = packet.getAddress();
        String addr = inet.getHostAddress();
        //转发数据报
        for(i = 0;i < ClientList.list.size();i++)
                     {
                       ClientInfo clientinfo = (ClientInfo)ClientList.list.get(i);
                       if(clientinfo.address.equals(addr))
                         break;
                     }
        if(fishinfo.right == 1)
          dest_inet = getNext(i);
         else
          dest_inet = getPrior(i);

          if(dest_inet != null)
          {
             packet = new DatagramPacket(recvBuf,recvBuf.length,dest_inet,5001);
             socket.send(packet);
          }
        System.out.println("data sent!\n from:"+addr+" to "+dest_inet.getHostAddress());
       }
       catch(Throwable t) {
            t.printStackTrace();
       }
       }
     }
     private InetAddress getNext(int i)
     {
       ClientInfo clientinfo;
       String dest_addr;
       InetAddress dest_inet = null;


       if(i < ClientList.list.size()-1)
          {
           clientinfo = (ClientInfo)ClientList.list.get(i+1);
           dest_addr = clientinfo.address;

          }
       else
       {
          clientinfo = (ClientInfo)ClientList.list.getFirst();
          dest_addr = clientinfo.address;
       }
        try{
               dest_inet =  InetAddress.getByName(dest_addr);
               }catch(UnknownHostException e)
               {e.printStackTrace();}
       return dest_inet;
     }
     private InetAddress getPrior(int i)
     {
     ClientInfo clientinfo;
     String dest_addr;
     InetAddress dest_inet = null;

     if(i > 0)
          {
           clientinfo = (ClientInfo)ClientList.list.get(i-1);
           dest_addr = clientinfo.address;
          }
       else
       {
          clientinfo = (ClientInfo)ClientList.list.getLast();
          dest_addr = clientinfo.address;
       }
        try{
               dest_inet = InetAddress.getByName(dest_addr);
               }catch(UnknownHostException e)
               {e.printStackTrace();}
        return dest_inet;
     }
}

⌨️ 快捷键说明

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