📄 videomessagemanager.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 + -