`
古尔丹之颅
  • 浏览: 30993 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

java 聊天室之 传送图片文字等功能的实现

阅读更多

       前几日写的一篇简陋之极的java聊天室被各位前辈说是,一塌糊涂,乌烟瘴气,只是简单的实现了需要的功能,并未做到人性化。在下痛定思痛,心想还是先学会显示功能再做美化界面,美化代码的打算!

      在奋斗了一天之后终于完成了集图片,文字,直线等功能为一体的群聊天室。先分析代码如下:

 

关于界面什么的我就不说了,笔者在前面的博客中有提过!直接附上各种功能的实现方法。

首先我们要传送信息,必须要让被传送的对象知道我们传送的是什么东西,所以在传送信息之前,我们首先要确定一个协议,比如说当客户端接收到的第一个int 值为1的时候,它接下来就要再接收4个int值,据此来画一条直线,而我服务器画一条直线的时候可以获得该直线的四个int值,但是在利用IO流发送这四个int值的时候,我首先要先发送一个1,也就是说我每次在要发送一天直线之前就要先发送一个1,当然在客户端读取的时候,我们第一次读取到的是1,就接收四个int。当读完四个int之后并画完一条直线之后我们还要读取数据,如果还是1的话,我们继续上面的操作,如果读取的是2,按照规定的协议,我们就调用相应的方法即可!!!!

现附上服务器发送直线的代码如下,该代码是写在界面类里面的内部类:

			
			//鼠标进入事件
			MouseListener ms=(new MouseListener(){
					public void mousePressed(MouseEvent e){
					
					 x1=e.getX();
					 y1=e.getY();
			 }				  
				    public void mouseReleased(MouseEvent e){
				    int x2=e.getX();
				    int y2=e.getY();
				    g.drawLine(x1,y1,x2,y2);
				    ChatTools.castbyte(1);
				    ChatTools.castbyte(x1);
				    ChatTools.castbyte(y1);
				    ChatTools.castbyte(x2);
				    ChatTools.castbyte(y2);				
				    }
					public void mouseClicked(MouseEvent e){}
					public void mouseEntered(MouseEvent e){}
					public void mouseExited (MouseEvent e){}		   
			});
				jp.addMouseListener(ms);

 

 

当然相应的我们也要在客户端定义一个读取数据的方法,首先我们要判断发送过来的是什么东西,我设置的协议是,如果首先读到的是1,接下来就画直线,如果读到的是2,接下来就接收一张图片,如果读到的是4,接下来读到的就是一段文字。该方法是放在客户端的线程中的,并且在线程的Run方法中调用该方法。

并且在每执行完一次操作之后,便再次读取一个int值,再次判断该int值为多少,以便得到下一个执行的指令。

 

 

public void processServer(Socket client){
		try{		
			ins=client.getInputStream();
			OutputStream out=client.getOutputStream();	
			dis = new DataInputStream(ins);			
			dout=new DataOutputStream(out);
		int t=dis.readInt();
			while(true){
				//如果读到的是1,调用读取线段的方法
			if(t==1){
				readline();
			}	
			//读到的是2则调用接受画面的方法
			if(t==2){
				readPic();
			}
			//如果读到的是4,则调用接受文字的方法
			if(t==4){				
				readMsg();
			}
			t=dis.readInt();
			}
			}catch(Exception ef){
			ef.printStackTrace();
			}
	}

 

当判断int值为1的时候,我们就调用画直线的方法,该方法如下

//定义一个读取线段的方法
	public void readline() {
			try {
				int x1=dis.readInt();
				int y1=dis.readInt();
				int x2=dis.readInt();
				int y2=dis.readInt();
				g.drawLine(x1,y1,x2,y2);
			} catch (IOException e) {
				e.printStackTrace();
			}
	}

 

 

 

当然,我们需要在客户端和服务器都要定义相同功能的传送和接收方法。

现在我们再写一个文字的接收方法,首先我们会在文本输入框中输入字符,并获得该文本内容,每当按下发送这个按钮时便调用消息的传送方法,将该消息发送出去!

 

 

 

				ActionListener al=(new ActionListener(){
				public void actionPerformed(ActionEvent e){
						String s=e.getActionCommand();
						if(s.equals("创建")){

							Chatserver cs=new Chatserver(9090,jta,dout,g);						
							cs.start();
						}
						//将服务器消息发给每个人
						if(s.equals("发送")){							
							String msg=jte1.getText();
							ChatTools.castMsg(msg);
							jta.append("服务器说:"+msg+"\r\n");
							jte1.setText("");
						}

 

其中ChatTools.castMsg();是一个消息群发的方法,该方法在队列类里面定义的,代码如下

		//将一个消息发送给所有人
	public static void castMsg(String str){	
		ChatTools.castbyte(4);
		for(int i=0;i<list.size();i++){			
			ServerThread st=list.get(i);			
			st.sendMs(i+"说:"+str);
		}
	}
 

 而sendMsg();则是一个消息的发送方法。该方法如下

		//将发送消息的代码包装到一个方法中
	public void sendMs(String msg){
			try{
				msg+="\r\n";
				dout.write(msg.getBytes());
				//强制输出
				dout.flush();		
			}catch(Exception ef){}
}	

 

实现字符串传输的重中之重便是读取的方法,我们会首先获得一个为4的int值,然后我们就要调用字符串的读取方法

	public void readMsg(){
		try{
			brd=new BufferedReader(new InputStreamReader(ins));
			String input=brd.readLine();
			jta.append(input +"\r\n");	
		}catch(Exception ef){}
}	

 我使用的BufferedReader缓冲流,实现整行读取的方式,该方式不会产生乱码,所以还是不错的。

 

 

而我今天要重点讲的便是图片从文件中读取和传送的方法。

首先我们要获得图片,再者我们要获取图片的宽度和高度,在循环遍历每个像素点,获取该点的颜色值,接着我们便在画布中调用画线的方法,依次画出每个像素点,并相应的给每个点附上相应的颜色即可。这样一张图片就在自己的画布上显示出来了!代码如下

	ActionListener al=(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				String s=e.getActionCommand();
				if(s.equals("创建")){

				Chatserver cs=new Chatserver(9090,jta,dout,g);						
				cs.start();
						}
						//将服务器消息发给每个人
				if(s.equals("发送")){							
				String msg=jte1.getText();
				ChatTools.castMsg(msg);
				jta.append("服务器说:"+msg+"\r\n");
				jte1.setText("");
				}
				if(s.equals("图片")){
							
				try {
				BufferedImage image = ImageIO.read(new File("2.jpg"));
				int m=image.getHeight();
				int n=image.getWidth();
								
				for(int i=0;i<n;i++){
				for(int j=0;j<m;j++){
				rgb=image.getRGB(i,j);
				System.out.println(i);
				System.out.println(j);										
				Color color=new Color(rgb);											
				g.setColor(color);
				g.drawLine(i,j,i,j);
				ChatTools.castbyte(2);
				ChatTools.castbyte(rgb);
				 ChatTools.castbyte(i);
		                ChatTools.castbyte(j);
			}	
										
		}
	} catch (IOException e1) {
			e1.printStackTrace();
		}

 

能画出图片,当然我们就能发送图片,我们就能相应的读取图片,在发送图片信息的时候,我们每取出一个点,就能获得该店的颜色,我们就把该点横坐标和纵坐标以及颜色值发送过去。在接收端,我们会首先读到一个为2的int值,然后程序会调用图片的读取方法。方法如下

//图片的读取方法
public void readPic(){
		int rgb;
	try {
		rgb = dis.readInt();	
		int i=dis.readInt();
		int j=dis.readInt();		
		Color color =new Color(rgb);
		g.setColor(color);
		g.drawLine(i,j,i,j);

	} catch (IOException e) {

		e.printStackTrace();
	}
	}

 值此,我们就实现了图片的发送功能了。我的代码也差不多了,至于如果有什么需要改进的地方请各位多多指教,本人是新手,迫切渴望成长,我也知道我的代码可定有很多漏洞,望不吝赐教!!!!!!!!!!!

 

现在附上具体的代码:服务器的四个类

界面类

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
	
	public class MainServer {	
			private int x1;
			private int y1;
			private Graphics g;
			private DataOutputStream dout;
			private int rgb;
			
			public void ShowUI(){
				JFrame jf=new JFrame();
				jf.setTitle("       服务器");
				jf.setSize(600,600);
				jf.setLayout(null);
				jf.setDefaultCloseOperation(3);
				JButton jb=new JButton("创建");
				jb.setBounds(0,0,60,30);
				final JButton jm = new JButton("图片");// 实例化菜单栏的对象
				jm.setBounds(70,0,60,30);
				jf.add(jm);
				JButton jb1=new JButton("发送");
				jb1.setBounds(0,40,60,30);
				final JTextField jte1=new JTextField(30);
				jte1.setBounds(70,45,300,20);
				final JTextArea jta=new JTextArea(20,30);
				jta.setBounds(0,80,600,150);
				final JPanel jp=new JPanel();
				jp.setBounds(0,250,600,600);
				jf.add(jb);
				jf.add(jb1);
				jf.add(jte1);
				jf.add(jta);
				jf.add(jp);
				jf.setVisible(true);				
				jp.setBackground(Color.gray);
				this.g=jp.getGraphics();
								
			ActionListener al=(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				String s=e.getActionCommand();
				if(s.equals("创建")){

				Chatserver cs=new Chatserver(9090,jta,dout,g);						
				cs.start();
						}
						//将服务器消息发给每个人
				if(s.equals("发送")){							
				String msg=jte1.getText();
				ChatTools.castMsg(msg);
				jta.append("服务器说:"+msg+"\r\n");
				jte1.setText("");
				}
				if(s.equals("图片")){
							
				try {
				BufferedImage image = ImageIO.read(new File("2.jpg"));
				int m=image.getHeight();
				int n=image.getWidth();
								
				for(int i=0;i<n;i++){
				for(int j=0;j<m;j++){
				rgb=image.getRGB(i,j);
				System.out.println(i);
				System.out.println(j);										
				Color color=new Color(rgb);											
				g.setColor(color);
				g.drawLine(i,j,i,j);
				ChatTools.castbyte(2);
				ChatTools.castbyte(rgb);
				ChatTools.castbyte(i);
				ChatTools.castbyte(j);
			}	
										
		}
	} catch (IOException e1) {
			e1.printStackTrace();
		}
							
					}
				}
				});
				jm.addActionListener(al);
				jb.addActionListener(al);
				jb1.addActionListener(al);
				
			//鼠标进入事件
			MouseListener ms=(new MouseListener(){
					public void mousePressed(MouseEvent e){
					
					 x1=e.getX();
					 y1=e.getY();
			 }				  
				    public void mouseReleased(MouseEvent e){
				    int x2=e.getX();
				    int y2=e.getY();
				    g.drawLine(x1,y1,x2,y2);
				    ChatTools.castbyte(1);
				    ChatTools.castbyte(x1);
				    ChatTools.castbyte(y1);
				    ChatTools.castbyte(x2);
				    ChatTools.castbyte(y2);				
				    }
					public void mouseClicked(MouseEvent e){}
					public void mouseEntered(MouseEvent e){}
					public void mouseExited (MouseEvent e){}		   
			});
				jp.addMouseListener(ms);
			}
		public static void main(String[] args){
				MainServer ms=new MainServer();
				ms.ShowUI();
			}
			}

 

处理客户机连接的两个线程类

import java.awt.Graphics;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

import javax.swing.JTextArea;

public class Chatserver extends Thread{
		private Graphics g;
		private int port;
		private JTextArea jta;
		private DataOutputStream dout;//输出流
		private ServerSocket ss;
		
		public Chatserver(int port,JTextArea jta,DataOutputStream dout,Graphics g){
			this.port=port;
			this.jta=jta;
			this.dout=dout;
			this.g=g;
		}
	
		public void run(){
				setUpServer(port);
		}
			//在指定端口上创建一个服务器
	public void setUpServer(int port){
		try{
			ss = new ServerSocket(port);
			System.out.println("服务器创建成功");
			//等待客户机连接,并设置成循环等待状态
		while(true){				
				Socket client=ss.accept();
				System.out.println("欢迎进入我的服务器");			
				//启动一个线程去处理该对象
				ServerThread st=new ServerThread(client,jta,dout,g);
				st.start();
				ChatTools.add(st);
				ChatTools.castMsg("有人上线!!目前在线人数"+ChatTools.getsize());
			}
		}catch(Exception ef){
			ef.printStackTrace();
		}
	}
}

	

 

import java.awt.Color;
import java.awt.Graphics;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

import javax.swing.JTextArea;

public class ServerThread extends Thread{
			private Socket client;//线程中处理的客户对象
			private DataOutputStream dout;//输出流
			private OutputStream out;//输出流
			private DataInputStream dis;//
			private JTextArea jta;
			private BufferedReader brd;	
			private InputStream ins;
			

			//创建线程对象时要传入他要处理的连接对象
			private Graphics g;
	public ServerThread(Socket client,JTextArea jta,DataOutputStream dout,Graphics g){
			this.client=client;		
			this.jta=jta;
			this.dout=dout;
			this.g=g;			
			}
	
	
	public void readMsg(){
		try{
			brd=new BufferedReader(new InputStreamReader(ins));
			String input=brd.readLine();			
			jta.append("客户说:"+input +"\r\n");	
			ChatTools.castMsg(input);
		}catch(Exception ef){}
}
			//将发送消息的代码包装到一个方法中
	public void sendMs(String msg){
			try{
				msg+="\r\n";
				dout.write(msg.getBytes());
				//强制输出
				dout.flush();		
			}catch(Exception ef){}
}	
	

	
	public void run(){
		//在线程中 调用处理链接的方法
		processChat(this.client);
		
	}
	
	
	//处理客户机进入的连接对象
	public void processChat(Socket client){
		try{		
			ins=client.getInputStream();
			out=client.getOutputStream();	
			dis = new DataInputStream(ins);			
			dout=new DataOutputStream(out);
		int t=dis.readInt();
			while(true){
			if(t==1){
				readline();
			}	
			if(t==2){
				readPic();
			}
			if(t==4){				
				readMsg();
			}
			t=dis.readInt();
			}
			}catch(Exception ef){
			ef.printStackTrace();
			}
	}
	
	//发送int型值得方法
public void sendbyte(int x1){		
		try{
			dout.writeInt(x1);
			dout.flush();
		}catch(Exception e){}
	}
	//图片的读取方法
public void readPic(){
		int rgb;
	try {
		rgb = dis.readInt();	
		int i=dis.readInt();
		int j=dis.readInt();		
		Color color =new Color(rgb);
		g.setColor(color);
		g.drawLine(i,j,i,j);
	} catch (IOException e) {
		e.printStackTrace();
	}
	}
	//定义一个读取线段的方法
public void readline() {
			try {
				int x1=dis.readInt();
				int y1=dis.readInt();
				int x2=dis.readInt();
				int y2=dis.readInt();
				g.drawLine(x1,y1,x2,y2);
			} catch (IOException e) {
				e.printStackTrace();
			}
	}

}

 一个队列类,用来存储连接进服务器的客户机对象类

import java.util.ArrayList;
import java.util.List;


public class ChatTools {
		//保存处理线程的队列对象
	static List<ServerThread> list=new ArrayList<ServerThread>();
	
	private ChatTools(){
		
	}//不需要创建引类对象,构造器则私有
	//取得保存保存处理线程对象的队列
	public static List<ServerThread> getAllthread(){
		return list;
	}
		//将一个客户对应的处理线程对象加入到队列中 
	public static void add(ServerThread st){
		//通知有人上线了
		
		list.add(st);
}
	
	public static int getsize(){
		int i=list.size();
		return i;
	}
		//将一个消息发送给所有人
	public static void castMsg(String str){	
		ChatTools.castbyte(4);
		for(int i=0;i<list.size();i++){			
			ServerThread st=list.get(i);			
			st.sendMs(i+"说:"+str);
		}
	}
	//定义一个字节群发的方法
	public static void castbyte(int x1){		
		for(int i=0;i<list.size();i++){			
			ServerThread st=list.get(i);
			st.sendbyte(x1);
		}
	}
}

 

 

接下来便是客户机的两个类

界面类

package 多人聊天室客户端;


import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;



public class Mainchat {

	private MainchatThread mt;
	private Graphics g;
	private int x1;
	private int y1;
	private InputStream ins;
	private int rgb;
	
	public void ShowUI(){
		
		JFrame jf=new JFrame();
		jf.setTitle("        客户机");
		jf.setSize(600,500);
		jf.setLocation(700,0);
		jf.setLayout(null);
		jf.setDefaultCloseOperation(3);
		JButton jb=new JButton("连接");
		jb.setBounds(0,0,60,30);
		final JButton jm = new JButton("图片");// 实例化菜单栏的对象
		jm.setBounds(70,0,60,30);
		jf.add(jm);
		JButton jb1=new JButton("发送");
		jb1.setBounds(0,40,60,30);
		final JTextField jte1=new JTextField(30);
		jte1.setBounds(70,45,300,20);
		final JTextArea jta=new JTextArea(20,30);
		jta.setBounds(0,80,600,150);
		JPanel jp=new JPanel();
		jp.setBounds(0,250,600,400);
		jf.add(jb);
		jf.add(jb1);
		jf.add(jte1);
		jf.add(jta);
		jf.add(jp);
		jf.setVisible(true);
		
		jp.setBackground(Color.gray);
		this.g=jp.getGraphics();
		
		ActionListener al=(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				String s=e.getActionCommand();
				if(s.equals("连接")){
					try {		
					 mt=new MainchatThread("localhost",9090,jta,g,ins);	
					 if(mt.runing()){
						 mt.start();						 
					 }
					} catch (Exception e1) {					
						e1.printStackTrace();
					}						
				}
				//将消息发给别人
				if(s.equals("发送")){
					String msg=jte1.getText();					
					jta.append("我说:"+msg+"\r\n");	
					MainchatThread.sendbyte(4);
					mt.sendMsg(msg);
					System.out.println("消息已经发送");
					jte1.setText("");
				}
				if(s.equals("图片")){					
					try {
					BufferedImage image = ImageIO.read(new File("2.jpg"));
					int m=image.getHeight();
					int n=image.getWidth();									
					for(int i=0;i<n;i++){
					for(int j=0;j<m;j++){
					rgb=image.getRGB(i,j);
					System.out.println(i);
					System.out.println(j);										
					Color color=new Color(rgb);											
					g.setColor(color);
					g.drawLine(i,j,i,j);
					MainchatThread.sendbyte(2);
					MainchatThread.sendbyte(rgb);
					MainchatThread.sendbyte(i);
					MainchatThread.sendbyte(j);
				}												
			}
		} catch (IOException e1) {
				e1.printStackTrace();
	}								
}				
		}
		});
		jm.addActionListener(al);
		jb.addActionListener(al);
		jb1.addActionListener(al);			
		jf.setVisible(true);
		MouseListener ms=(new MouseListener(){
			public void mousePressed(MouseEvent e){			
			 x1=e.getX();
			 y1=e.getY();
			 System.out.println(x1);
		 }

		  
		    public void mouseReleased(MouseEvent e){
		    int x2=e.getX();
		    int y2=e.getY();
		    g.drawLine(x1,y1,x2,y2);
		    MainchatThread.sendbyte(1);
		    MainchatThread.sendbyte(x1);
		    MainchatThread.sendbyte(y1);
		    MainchatThread.sendbyte(x2);
		    MainchatThread.sendbyte(y2);
		    }
			public void mouseClicked(MouseEvent e){}
			public void mouseEntered(MouseEvent e){}
			public void mouseExited (MouseEvent e){}		   
	});
			jp.addMouseListener(ms);
	} 

	public static void main(String[] args){
		Mainchat ms=new Mainchat();								
		ms.ShowUI();
	}
	
}

 

线程类,用来运行客户机读取服务器发来的信息

package 多人聊天室客户端;

import java.awt.Color;
import java.awt.Graphics;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import javax.swing.JTextArea;


public class MainchatThread extends Thread{
	private static DataOutputStream dout;
	private InputStream ins;
	private BufferedReader brd;	
	private int port;
	private String ip;
	private JTextArea jta;
	private Graphics g;
	private DataInputStream dis;
	private Socket socket;


	public MainchatThread(String ip,int port,JTextArea jta,Graphics g,InputStream ins){
		this.jta=jta;
		this.ip=ip;
		this.port=port;
		this.g=g;
		this.ins=ins;
	}

	public boolean runing(){
		try{
			socket=new Socket(this.ip,this.port);		
			System.out.println("连接成功");
			InputStream ins=socket.getInputStream();
			OutputStream out=socket.getOutputStream();
			dis=new DataInputStream(ins);
			dout=new DataOutputStream(out);			
		return true;
		}catch (Exception e){
			e.printStackTrace();
		}return false;
		}
	//图片的读取方法
public void readPic(){
		int rgb;
	try {
		rgb = dis.readInt();	
		int i=dis.readInt();
		int j=dis.readInt();		
		Color color =new Color(rgb);
		g.setColor(color);
		g.drawLine(i,j,i,j);

	} catch (IOException e) {

		e.printStackTrace();
	}
	}
	//发送信息
	public void sendMsg(String msg){
		try{
			msg+="\r\n";
			dout.write(msg.getBytes());
			dout.flush();
		}catch(Exception ef){}
}
	public static void sendbyte(int i){
		try{
			dout.writeInt(i);
			dout.flush();
		}catch(Exception ef){}
}
	
	//读取服务端信息的方法
	public void readMsg(){
		try{
			brd=new BufferedReader(new InputStreamReader(ins));
			String input=brd.readLine();
			jta.append(input +"\r\n");	
		}catch(Exception ef){}
}	

	public void readline(){
		try{
				int x1=dis.readInt();
				int y1=dis.readInt();
				int x2=dis.readInt();
				int y2=dis.readInt();
				g.drawLine(x1,y1,x2,y2);
		}catch(Exception ef){}
}	

	
	public void processServer(Socket client){
		try{		
			ins=client.getInputStream();
			OutputStream out=client.getOutputStream();	
			dis = new DataInputStream(ins);			
			dout=new DataOutputStream(out);
		int t=dis.readInt();
			while(true){
				//如果读到的是1,调用读取线段的方法
			if(t==1){
				readline();
			}	
			//读到的是2则调用接收图片的方法
			if(t==2){
				readPic();
			}
			//如果读到的是4,则调用接受文字的方法
			if(t==4){				
				readMsg();
			}
			t=dis.readInt();
			}
			}catch(Exception ef){
			ef.printStackTrace();
			}
	}
	public void run(){
		processServer(socket);
}
	
}

 

 

至此完结!!!

  • src.zip (51.4 KB)
  • 下载次数: 26
2
1
分享到:
评论
4 楼 古尔丹之颅 2013-08-01  
嗯,我也觉得,苦于时间过于紧迫,只是追求实现功能了,多谢提醒,以后会改进的!
3 楼 houyujiangjun 2013-08-01  
太过简单了...界面粗糙.
2 楼 古尔丹之颅 2013-07-31  
谢谢,才写博客近二个月,才知道有打包这回事!!!
1 楼 在世界的中心呼喚愛 2013-07-31  
建议打包下载!!

相关推荐

    Java聊天室程序

    Java聊天室程序是一种基于Java技术实现的网络通信应用,它为用户提供了一个互动交流的平台,具备多种特性以满足用户的基本聊天需求。在这个程序中,开发者利用了Java的强大网络编程能力,构建了一个稳定、高效的聊天...

    网络聊天室带有文件上传下载功能

    【网络聊天室】是一种在线交流平台,允许用户通过互联网实时发送文字消息、语音甚至文件。在本项目中,网络聊天室是用Java Swing构建的,它是一个轻量级的Java库,用于创建桌面应用程序的图形用户界面(GUI)。Java ...

    java版聊天室

    在这个聊天室中,用户可以进行文字聊天、发送表情、甚至可能包括文件传输等功能。下面将详细讨论Java版聊天室的核心技术和实现细节。 首先,Java版聊天室的架构通常会采用客户端-服务器模型(Client-Server Model)...

    java源码包---java 源码 大量 实例

    java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥  ...

    基于java swing + mybatis +tcp 的聊天系统,具有添加好友、收发文字图片等功能.zip

    **聊天功能实现**: 1. **添加好友**:用户可以通过搜索用户名或扫描二维码等方式添加好友。此功能需要后台数据库支持,MyBatis可以帮助处理用户关系的增删改查操作。 2. **文字聊天**:用户发送的文字信息通过TCP...

    源码01 在线聊天室系统_在线聊天室系统_

    在线聊天室系统是一种基于互联网的实时通信平台,它允许用户通过文字、语音或视频等多种方式相互交流。在本文中,我们将深入探讨这个系统的构建及其主要组成部分,以满足用户管理、发言、信息显示和用户注销等核心...

    java源码包3

    java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,...

    java源码包2

    java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,...

    JAVA基于局域网的聊天室系统(源代码+LW).zip

    根据压缩包子文件的文件名称“JAVA基于局域网的聊天室系统(源代码+论文)”,我们可以期待找到的不仅有源代码,还有一篇相关的论文或文档,这份文档可能会详细解释系统的架构、设计决策、功能实现以及可能遇到的问题...

    java开发 QQ聊天 源码

    在Java聊天室中,可能有一个`ChatRoom`类,用于管理群聊中的成员和聊天记录。踢人功能需要服务器端有权限判断,并通过特定的命令或操作将某个用户从聊天室中移除。这涉及到权限控制和事件驱动编程。 文件传输也是...

    Java即时聊天系统毕业设计

    - 聊天模块:包括一对一私聊和群组聊天,实现文字、表情、图片等消息的发送与接收。 - 文件传输模块:支持文件的上传与下载,确保文件的完整性。 - 用户管理模块:用户可修改个人信息,查看和管理聊天记录。 第三章...

    online-chat-room-java-nodb.zip_online chat room_聊天室

    本项目"online-chat-room-java-nodb.zip"提供了一个基于Java实现的在线聊天室,其特点是无需连接数据库,这对于初学者或者需要快速搭建简单聊天环境的开发者来说,是一个很好的学习和实践案例。 该项目的核心知识点...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 同上 java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示...

    JAVA上百实例源码以及开源项目源代码

    将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 同上 java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示...

    java源码包4

    java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 同上 java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示...

    java聊天程序源码-可以发送图片,文件,设置字体,截屏

    该Java聊天程序是一个基于文本的交互式应用,允许用户发送文字消息、图片和文件,并具有字体设置和屏幕截图功能。这个程序的实现依赖于Java语言,因此深入理解Java编程基础是必要的。以下是一些关键的知识点: 1. *...

    Java企业QQ/文件传输/表情

    而Websocket则更适用于需要实时交互的场景,比如聊天室或在线游戏。 在文件传输方面,Java提供了多种方式来处理文件的读写和传输。例如,可以使用java.io包中的FileInputStream和FileOutputStream进行本地文件的...

Global site tag (gtag.js) - Google Analytics