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

📄 clientrecievemsg.java

📁 简易聊天工具
💻 JAVA
📖 第 1 页 / 共 2 页
字号:

import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.text.*;
import javax.swing.event.*;
import java.net.*;
import java.io.*;
import javax.swing.border.*;
import javax.media.*;
import javax.media.format.*;
import javax.media.protocol.DataSource;
public class ClientRecieveMsg extends Thread
{
	String name = null;
	BufferedReader in = null;
	PrintWriter out = null;	
	Socket socket = null;
	ClientFrame parent = null;
	Style systemStyle = null;
	boolean netMeetingRefuse = false;
	boolean videoChatRefuse = false;
	boolean audioChatRefuse = false;
	String applicant;
	public ClientRecieveMsg(ClientFrame p, String n, Socket s)
	{
		parent = p;
		name = n;
		socket = s;
		systemStyle = parent.recordDoc.getStyle("xitong");
		System.out.println(systemStyle);	
		try
		{							// 实例化两个数据流
		    out = new PrintWriter(
					new BufferedWriter(
						new OutputStreamWriter(socket.getOutputStream())));
			in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
		}
		catch(IOException e) 
		{
		    System.out.println("Error:" + e);
		    parent.disconnect();
		}
	}
	public void run()
	{
		String msg = null;
		while(true)	
		{
		    try
		    {
		    	msg = in.readLine();
		    }			// 读取从服务器传来的信息
		    catch(IOException e) 
		    {
				System.out.println("Error:" + e);
				parent.disconnect();
				return;
		    }
		    StringTokenizer st = new StringTokenizer(msg, ":");
		    String head = st.nextToken();
		   	System.out.println(msg);
		    if(head.equals("PEOPLE"))
		    {
		    	parent.ChatFriends.removeAllElements();
		    	parent.sendTo.removeAllItems();
		    	while(st.hasMoreTokens())
		    	{
		    		StringTokenizer stt = new StringTokenizer(st.nextToken(), "|");
		    		String name = stt.nextToken();
		    		String ip = stt.nextToken();
		    		People p = new People(name, ip);
		    		parent.ChatFriends.add(p);
		    		parent.sendTo.addItem(name);
		    	}
		    	parent.sendTo.addItem("所有人");
		    	parent.sendTo.setSelectedItem("所有人");	
		    }
		    else if(head.equals("MSG"))
		    {
		    	parseMsg(st.nextToken());
		    }
		    else if(head.equals("QUIT"))
		    {
		    	try 
		    	{
		    		this.stop();
		        	parent.listen = null;
		        	parent.soc.close();
			    	parent.soc = null;
			    	parent.recordDoc.insertString(parent.recordDoc.getLength(), "这个名字已有人使用,请重新登陆!" + '\n', systemStyle);
			    }
			    catch(Exception e) 
			    {
             	    System.out.println("Error:" + e);
             	}
             	return;	
		    }
		    else if(head.equals("NETMEETING_CONNECT"))
		    {
		    	//st.nextToken();
		    	applicant = st.nextToken();
		    	new SCFrame(this, "NETMEETING_CONNECT",applicant);	
		    }
		    else if(head.equals("NETMEETING_START"))
		    {
		    	StringTokenizer peoplest = new StringTokenizer(st.nextToken(), "|");
		    	int tokensCount = peoplest.countTokens();
		  		String[] meetingPeople = new String[tokensCount]; 
		    	for(int i = 0; i < tokensCount; i++)
		    	{
		    		meetingPeople[i] = peoplest.nextToken();
		    	}
		    	String[] sessions = new String[100];
		    	String[] IPs = new String[100];
		    	int k = 0;
		    	int g = 0;
		    	for(int j = 0; j < meetingPeople.length; j++)
		    	{
		    		String n = meetingPeople[j];
		    		if(!n.equals(this.name))
		    		{
		    			String ip = parent.findIP(n);
		    			IPs[g] = ip;
		    			g++;
		    			int port = 0;
		    			for(int h = 0; h < parent.ChatFriends.size(); h++)
		    			{
		    				People p = (People)parent.ChatFriends.get(j);
		    				if(p.name.equals(n)) 
		    				{
		    					port = 1000 * h + 1000;
		    					break;	
		    				}	
		    			}
		    			if(ip != null && port != 0)
		    			{
		    				sessions[k] = ip + "/" + port;
		    				k++;
		    			}	
		    		}	
		    	}
		    	startTransmit(IPs);
		    	startReceive(meetingPeople.length - 1, sessions);
		    	//parent.netMeeting.notifyAll();
		    }
		    else if(head.equals("AUDIOCHAT_CONNECT"))	
		    {
		    	st.nextToken();
		    	applicant = st.nextToken();
		    	new SCFrame(this, "AUDIOCHAT_CONNECT", applicant);
		    }
		    else if(head.equals("AUDIOCHAT_CONNECT_REVERT"))
		    {
		    	st.nextToken();
		    	String feedBack = st.nextToken();
		    	if(feedBack.equals("accept"))
		    	{
		    		String[] IPs = new String[1];
		    		IPs[0] = parent.findIP((String)parent.sendTo.getSelectedItem());
		    		String[] sessions = new String[1];
		    		sessions[0] = IPs[0] + "/" + getOtherPort(applicant);
		    		startTransmit(IPs);
		    		startReceive(1, sessions);
		    	}
		    	else 
		    	{
		    		JOptionPane.showMessageDialog(parent, "对方拒绝了你的请求!", "系统消息", 
		    										JOptionPane.INFORMATION_MESSAGE);
		    		try
					{
						parent.recordDoc.insertString(parent.recordDoc.getLength(), "对方拒绝了你的请求!" + '\n', null);	
					}catch(Exception e){}								
		    	}
		    }
		    else if(head.equals("VIDEOCHAT_CONNECT"))
		    {
		    	st.nextToken();
		    	applicant = st.nextToken();
		    	new SCFrame(this, "VIDEOCHAT_CONNECT", applicant);
		    }
		    else if(head.equals("VIDEOCHAT_CONNECT_REVERT"))
		    {
		    	st.nextToken();
		    	String feedBack = st.nextToken();
		    	if(feedBack.equals("accept"))
		    	{
		    		String[] IPs = new String[1];
		    		IPs[0] = parent.findIP((String)parent.sendTo.getSelectedItem());
		    		String[] sessions = new String[1];
		    		sessions[0] = IPs[0] + "/" + getOtherPort(applicant);
		    		startTransmit(IPs);
		    		startReceive(1, sessions);
		    	}
		    	else 
		    	{
		    		JOptionPane.showMessageDialog(parent, "对方拒绝了你的请求!", "系统消息", 
		    										JOptionPane.INFORMATION_MESSAGE);
		    		try
					{
						parent.recordDoc.insertString(parent.recordDoc.getLength(), "对方拒绝了你的请求!" + '\n', null);	
					}catch(Exception e){}								
		    	}
		    }
		    else if(head.equals("SYSTEM"))
		    {
		    	try
		    	{
		    		String s = st.nextToken();
		    		System.out.println(s);
		    		parent.recordDoc.insertString(parent.recordDoc.getLength(), s + '\n', systemStyle);	
		    	}catch(Exception e){e.printStackTrace();}
		    }
		}
	}
	private boolean findMyself(String[] ps)
	{
		for(int i = 0; i < ps.length; i++)
		{
			if(ps[i].equals(this.name))
			{    
				return true;	
			}
		}
		return false;	
	}
	private void parseMsg(String s)
	{
		try
		{
			StringTokenizer st = new StringTokenizer(s, "|");
			String f = st.nextToken();
            String recievetoName = st.nextToken();
	        String recievesendName = st.nextToken();
	        String recieveyear = st.nextToken();
	        String recievemonth = st.nextToken();
	        String recieveday = st.nextToken();
	        String recieveweekday = st.nextToken();
	        String recievehour = st.nextToken();
	        String recievetime = st.nextToken();
	        String recieveFont = st.nextToken();
	        int recieveFontSize = Integer.parseInt(st.nextToken());
		    int recieveColorRed = Integer.parseInt(st.nextToken());
		    int recieveColorGreen = Integer.parseInt(st.nextToken());

⌨️ 快捷键说明

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