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

📄 videomessagemanager.java

📁 一个初级的远程视频系统的代码
💻 JAVA
字号:
package video.client;

import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.nio.charset.*;
import java.net.*;
import java.util.*;
import video.*;

public class VideoMessageManager implements MessageManager{
  private SocketChannel socketChannel;
  private MessageListener messageListener;
  private String serverAddress;//服务器地址
  private String sendPort;//本机用来传送数据的端口
  private String receivePort;//本机接收数据的端口
  private String localAddress;//本机IP地址
  private ReceivingThread receiveMessage;
  private boolean connected;
  private Charset charSet = Charset.forName("UTF-8");
  private ByteBuffer writeBuffer;
  private ByteBuffer readBuffer = ByteBuffer.allocate(512);
  public VideoMessageManager(String host)
  {
    serverAddress = host;
    connected = false;
    //得到本机IP
    try{
      StringTokenizer tokenizer = new StringTokenizer(InetAddress.getLocalHost().toString(),"/");
      tokenizer.nextToken();
      localAddress = tokenizer.nextToken();
      //System.out.println(localAddress);
    }
    catch(UnknownHostException ex){
      System.err.println(ex);
    }
  }

  public void connect(MessageListener listener)
  {
    messageListener = listener;
    try{
      socketChannel = SocketChannel.open();
      //在此修改连接的IP和端口号:InetSocketAddress(InetAddress addr, int port) 根据 IP 地址和端口号创建套接字地址。
      socketChannel.connect(new InetSocketAddress(InetAddress.getByName(serverAddress),12345));
      receiveMessage = new ReceivingThread();
      receiveMessage.start();
      //System.out.println(receiveMessage.toString());

      connected = true;
    }
    catch(IOException ioException){
      ioException.printStackTrace();
    }
  }
  public void disconnect(MessageListener listener)
  {
    if(connected){
      try{
        //sendMessage("","Disconnect");
        connected = false;
        receiveMessage.interrupt();
      }
      catch(Exception exception){
        exception.printStackTrace();
      }
    }
  }
  public void sendMessage(String userName,String messageBody)
  {
    String message = userName+">"+messageBody;
    try{
      writeBuffer = charSet.encode(message);
      socketChannel.write(writeBuffer);
    }
    catch(IOException ioException){
      ioException.printStackTrace();
      try{
        socketChannel.close();
      }
      catch(IOException exception){
        exception.printStackTrace();
      }
    }
  }
  public String getLocalAddress()
  {
    return localAddress;
  }
  public String getSendPort()
  {
    return sendPort;
  }
  public String getReceivePort()
  {
    return receivePort;
  }
  
  public class ReceivingThread extends Thread
  {
    public void run()
    {
      int messageLength = 0;
      String message = "";
      try{
        do{
          readBuffer.clear();
          socketChannel.read(readBuffer);
          readBuffer.flip();
          CharBuffer charMessage = charSet.decode(readBuffer);
          message = charMessage.toString().trim();
          
          StringTokenizer tokenizer = new StringTokenizer(message,">");
          int count = tokenizer.countTokens();
          tokenizer.nextToken();
          String ss = tokenizer.nextToken();
          if(count==2)
            {
        	    if(message.indexOf("Disconnect")>=0)
        	    {}
        	    else
        	    {
            	StringTokenizer tokenizer0 = new StringTokenizer(message,">");
            	messageListener.messageReceived(tokenizer0.nextToken(),tokenizer0.nextToken());}
            }
           if(count > 2 && count != 4){
        	  messageListener.sessionReceived(message);
           }
           if(count == 4)
           {
        	   messageListener.VedioConnection(message);
           }
        }while(true);
      }
      catch(IOException ioException){
        if(ioException instanceof ClosedByInterruptException)
          System.out.println("socket channel closed");
        else{
          ioException.printStackTrace();
          try{
            socketChannel.close();
            System.out.println("socket channel closed");
          }
          catch(IOException exception){
            exception.printStackTrace();
          }
        }
      }
    }
  }

}

⌨️ 快捷键说明

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