精华内容
下载资源
问答
  • 只单独提供给你和你的私密恋人聊天的软件!小编为大家推荐一些可以伪装,能够私密聊天的软件 密聊猫 功能: 1、自定义图标与登录背景 2、聊天界面伪装 3、不上传用户聊天记录,只加密储存到双方手机 4、只能...

     

      适合两个人用的专门的聊天软件!只有两个人才能互相联系并且使用的私密聊天工具,不可以加其他的陌生人!别人也看不到你和你的朋友聊天!没有任何其他功能!只单独提供给你和你的私密恋人聊天的软件!小编为大家推荐一些可以伪装,能够私密聊天的软件

     

    密聊猫

    功能:

    1、自定义图标与登录背景

    2、聊天界面伪装

    3、不上传用户聊天记录,只加密储存到双方手机

    4、只能通过注册ID添加好友,回归聊天本质

    5、阅后即焚、发后即删

    6、收到消息伪装

    付费会员:48元/月,免费试用3天(有邀请码试用7天)

    伪装效果:

    好运吧

    功能:

    1、约3种可选伪装模板(计算器、资讯、单词学习)

    2、收到消息伪装(聊天界面无法伪装)

    3、储存空间(服务器存储)

    4、一键返回伪装界面

    付费会员:98元/月,可试用计算器伪装功能

    伪装效果:

     

    展开全文
  • 采用C++,MFC编写的聊天软件语音聊天,文件传输,文字聊天功能。服务器和客户端是封装到一起。界面是最简洁经典界面,没有进行优化和美化。代码可以直接运行。
  • 想要搞一个实时聊天的软件有没有大神知道实时聊天都是怎么实现的?有没有什么对于实时聊天,如QQ,微信的框架?
  • 内容索引:JAVA源码,媒体网络,ICQ,QQ,聊天软件 其实像QQ聊天这样的软件有很多,但基本上都没有公开源代码,而且也只是提供软件客户端,一些像ICQ的软件虽提供服务端但却不公开源代码。本人很想知道它的运行机理,...
  • Java TCP 聊天软件

    2008-12-15 13:20:29
    基于TCP的聊天软件群聊和单对单聊天功能。登录界面输入昵称和服务器IP可以连接到服务器,然后就可以和在线用户聊天用户名列表,用户上线更新列表,下线用户列表更新还没有实现。
  • Hola 前言 本项目旨在从零到壹,制作一款界面精美的聊天软件。 Github 地址因为已工作,所以可能没有多少时间来...因为本人是开发,设计功底欠缺,所以软件 logo 设计有点丑,如果大神更好 logo,欢迎 emai...
        

    Hola

    前言

    本项目旨在从零到壹,制作一款界面精美的聊天软件。

    Github 地址

    因为已工作,所以可能没有多少时间来继续跟进这个项目了,项目可优化的点已在下文列出,欢迎大家 Fork 或 Star。

    ps: 征 logo 一枚。因为本人是开发,设计功底欠缺,所以软件 logo 设计的有点丑,如果有大神有更好的 logo,欢迎 email。

    技术栈

    • 开发环境

      • 操作系统:macOS High Sierra v10.13.1
      • 编辑器:Visual Studio Code v1.19.1
      • npm:v5.3.0
      • Node:v8.4.0
    • 客户端

      • UI设计:Sketch
      • 软件框架:Electron
      • 界面实现:Vue.js + Vuex + Vue-Router + Webpack
      • 通信模块:socket.io-client
      • 视频聊天:原生 WebRTC
    • 服务端

      • 服务器:Node.js
      • 后端框架:Koa2
      • 通信模块:socket.io
      • 数据库:Redis 和 MongoDB

    软件效果图

    效果图

    实现功能

    • [x] 登录注册模块(<手机号+验证码>形式的登录注册)
    • [x] 聊天区模块

      • [x] 最近联系人列表
      • [x] 历史消息(暂未做上拉加载)
      • [x] 私聊

        • [x] 文本消息
        • [x] 图片消息
        • [x] 视频聊天
      • [x] 群聊

        • [x] 文本消息
        • [x] 图片消息
    • [x] 联系人模块

      • [x] 联系人列表
      • [x] 好友资料展示
      • [x] 群组资料展示
      • [x] 删好友,退出或解散群组
    • [x] 功能区模块

      • [x] 添加好友/群组
      • [x] 创建群组
    • [x] 设置区模块

      • [x] 个人资料设置
      • [x] 软件设置

        • [x] 国际化

          • [x] 中文
          • [x] 英文

    项目目录

    .
    ├── LICENSE         
    ├── README.md
    ├── client          # 客户端代码
    ├── docs            # 各种文档(需求文档、UI文档、流程图、数据库设计等)
    ├── preview.png     # 软件预览图
    └── server          # 服务端代码

    反思 & 展望

    该项目为我大学毕业设计的项目,因时间紧迫,只实现了基本的聊天、加删好友等功能,很多功能还未实现,所以软件还是有很多的瑕疵。为此,我特意思考了很长时间,将待改进的细节或新的功能总结如下:

    • [ ] 历史消息做成上拉瀑布流加载的效果
    • [ ] 为消息注明消息时间、发送状态、已读未读等状态
    • [ ] 为最近联系人列表添加最后一条消息的展示
    • [ ] 为最近联系人添加未读消息个数的统计
    • [ ] 添加好友或加入群组时要进行确认
    • [ ] 为软件的新消息使用系统原生通知窗口通知
    • [ ] 为软件增加原生菜单
    • [ ] 升级输入框,从而可以向输入框直接插入剪切板中的图片
    • [ ] 自己搭建文件服务器,图片服务器(或者使用第三方比如七牛云、阿里云的相关服务)
    • [ ] 为 WebRTC 实现后备方案,搭建 Relay Server,以增强视频聊天的稳定性
    • [ ] 增加网络断开处理的相关逻辑
    • [ ] 了解数据加密相关知识,为消息作加密处理
    • [ ] 为软件做跨平台处理,兼容性方面有待加强
    • [ ] 实现软件自动更新
    • [ ] 接入智能机器人聊天
    • [ ] 实现本地存储历史消息(nedb
    • [ ] 为软件加入聊天情况分析(比如每天发了多少条消息,与谁聊天最频繁等)

    扩展阅读

    展开全文
  • this.setTitle("局域网聊天:"+name); this.setSize(600,500); this.setLocation(300, 300); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { ...
    //登陆界面
    package com.konghao.netGUI05;
    
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    
    import javax.swing.*;
    
    @SuppressWarnings("serial")
    public class LoginFrame extends JFrame {
    	private JButton jb; //登陆按钮
    	private JTextField jtf;//输入框
    	private JLabel jl;//"用户名"
    	public static void main(String[] args) {
    		new LoginFrame();
    	}
    	//界面关闭方法
    	public void close(){
    		this.setVisible(false);
    	}
    	public LoginFrame() {
    		this.setSize(350,100);
    		this.setLocation(500, 500);
    		this.setResizable(false);
    		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    		this.setTitle("登陆");
    		
    		jb = new JButton("登陆");
    		jtf = new JTextField(12);
    		jl = new JLabel("请输入用户名:");
    		jtf.addKeyListener(new KeyClick());
    		
    		this.add(jl);this.add(jtf);this.add(jb);
    		this.setLayout(new FlowLayout());
    		//添加事件
    		jb.addActionListener(new ActionListener() {
    			
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				String name = jtf.getText();
    				if(name==null||name.trim().equals("")){
    					JOptionPane.showMessageDialog(null, "用户名不能为空!");
    					return;
    				}
    				new ClientFrame(name);
    				close();
    			}
    		});
    		
    		
    		this.setVisible(true);
    		
    	}
    	
    	private class KeyClick extends KeyAdapter{
    		@Override
    		public void keyPressed(KeyEvent e) {
    			if(e.getKeyCode()==KeyEvent.VK_ENTER){
    				String name = jtf.getText();
    				if(name==null||name.trim().equals("")){
    					JOptionPane.showMessageDialog(null, "用户名不能为空!");
    					return;
    				}
    				new ClientFrame(name);
    				close();
    			}
    		}
    	}
    }
    

    //客户端


    package com.konghao.netGUI05;
    
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.event.*;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.*;
    
    import javax.swing.DefaultListModel;
    import javax.swing.*;
    
    
    
    @SuppressWarnings("serial")
    public class ClientFrame extends JFrame{
    //	public static void main(String[] args) {
    //		new ClientFrame();
    //	}
    	private JTextArea jta; //中央信息区域
    	private JList<String>  list; //当前用户列表
    	private JScrollPane jsp1,jsp2; //滚动条
    	private JPanel jp;//底部容器
    	private JTextField jtf;//信息输入框
    	private JButton jb;//发送按钮
    	private JLabel jl;
    	private String name;
    	private boolean stop = false;
    	
    	
    	private Socket s;
    	private PrintWriter out;
    	private BufferedReader br;
    	private DefaultListModel<String> model ;
    	private List<String> users_selected = null;
    	
    	public ClientFrame(String name) {
    		this.name = name;
    		this.setTitle("局域网聊天:"+name);
    		this.setSize(600,500);
    		this.setLocation(300, 300);
    		this.addWindowListener(new WindowAdapter() {
    			@Override
    			public void windowClosing(WindowEvent e) {
    				out.println(Server.DISCONNECT_TOKEN);
    			}
    			
    		});
    		
    		jta = new JTextArea();
    		jsp1 = new JScrollPane(jta);
    		list = new JList<String>();
    		list.setBackground(Color.GREEN);
    		jsp2 = new JScrollPane(list);
    		
    		model = new DefaultListModel<String>();
    		list.setModel(model);
    		
    		jp = new JPanel();
    		jtf = new JTextField(18);
    		jb = new JButton("发送");
    		jl = new JLabel("请输入消息:");
    		list.setFixedCellWidth(100);
    		new BorderLayout();
    		this.add(jsp2,BorderLayout.WEST);
    		this.add(jsp1);
    		jp.add(jl);jp.add(jtf);jp.add(jb);
    		new BorderLayout();
    		this.add(jp,BorderLayout.SOUTH);
    		jb.addActionListener(new BottonClick());
    		jtf.addKeyListener(new KeyPressed());
    		
    		connect();
    		
    		this.setVisible(true);
    		
    	}
    	
    	//连接方法
    	public void connect() {
    			try {
    				s = new Socket(Server.HOST,Server.PORT);
    				br = new BufferedReader(new InputStreamReader(s.getInputStream()));
    				out = new PrintWriter(s.getOutputStream(),true);
    				out.println(name);
    				
    				new Thread(new ReceiveThread()).start();
    				
    			} catch (UnknownHostException e) {
    				e.printStackTrace();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    	}
    	
    	//接收服务器信息线程
    	public class ReceiveThread implements Runnable{
    
    		@Override
    		public void run() {
    			try {
    				while(true){
    					if(stop){
    						break;
    					}
    					receive();
    				}
    				
    				System.exit(0);
    			} catch (IOException e) {
    				e.printStackTrace();
    			} finally{
    				try {
    					if(s!=null) s.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    			
    		}
    		
    	}
    	//接收方法
    	public void receive() throws IOException{
    		String str = br.readLine();
    		if(Server.DISCONNECT_TOKEN.equals(str)){
    			close();
    			return;
    		}
    		if(str.startsWith(Server.USER_FLAG)){
    			addList(str);
    			return;
    		}
    		
    		addArea(str); //将接收到的信息添加到信息区
    	}
    	//点击用户列表时获得用户;
    	public String getUsers(){
    		users_selected = new ArrayList<String>();
    		users_selected = list.getSelectedValuesList();
    		String str = Server.TOKEN_START;
    		if(!users_selected.isEmpty()){
    			for(String users:users_selected){
    				if(users.equals("所有人")){
    					users_selected.remove(users);
    					return str+Server.TOKEN_ALL+Server.TOKEN_END;
    				}else{
    					str+=(users+","); // to: XXX,XXX,XX,:endmsg;
    				}
    			}
    		}else{
    			str+=Server.TOKEN_ALL;
    		}
    		return str+Server.TOKEN_END;
    		
    	}
    	//将用户列表添加到List的方法
    	public void addList(String str){
    		model.removeAllElements();
    		String us = str.substring(Server.USER_FLAG.length());
    		String[] usr = us.split(",");
    		model.addElement("所有人");
    		for(String u : usr){
    			model.addElement(u);
    		}
    	}
    	//将信息添加到TextArea的方法
    	public void addArea(String msg){
    		jta.setText(jta.getText()+msg+"\n");
    	}
    	
    	//关闭方法
    	public void close(){
    		stop = true;
    	}
    	//给服务器发送信息方法
    	public void send(){
    		String msg = jtf.getText();
    		if(msg==null||msg.trim().equals("")){
    			jtf.setText("");
    			return;
    		}
    		out.println(getUsers()+msg);
    		jtf.setText("");
    		
    	}
    	//点击按钮事件
    	private class BottonClick  implements ActionListener{
    
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			if(e.getSource()==jb){
    				send();
    			}
    		}
    	}
    	//点击回车键事件
    	private class KeyPressed extends KeyAdapter{
    		@Override
    		public void keyPressed(KeyEvent e) {
    			if(e.getKeyCode()==KeyEvent.VK_ENTER){
    				send();
    			}
    		}
    	}
    	
    	
    }
    
    //服务端

    package com.konghao.netGUI05;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.SocketException;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    public class Server {
    	public static final String HOST = "127.0.0.1";
    	public static final int PORT = 6060;
    	public static final String DISCONNECT_TOKEN = "disconnect";
    	public static final String USER_FLAG = "users:";
    	public static final String TOKEN_START = "to:";
    	public static final String TOKEN_END = ":end";
    	public static final String TOKEN_ALL = "allOfClients";
    	
    	private boolean stop = false;
    	private Map<String,ServerThread> clients;
    	
    	
    	public static void main(String[] args) {
    		new Server().startup();
    	}
    	
    	public void startup(){
    		ServerSocket ss = null;
    		clients = new HashMap<String,ServerThread>(); //初始化不能放在while循环之中,否则每次添加都是一个
    												//新的列表。
    		try {
    			ss = new ServerSocket(PORT);
    			System.out.println("The Server is ready!");
    			while(true){
    				Socket s = ss.accept();
    				ServerThread st = new ServerThread(s);
    				new Thread(st).start();
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				if(ss!=null) ss.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    	
    	public class ServerThread implements Runnable{
    		private Socket s;
    		private BufferedReader br = null;
    		private PrintWriter out = null;
    		private String name;
    		
    		public ServerThread(Socket s) throws IOException {
    			this.s = s;
    			br = new BufferedReader(new InputStreamReader(s.getInputStream()));
    			out = new PrintWriter(s.getOutputStream(),true);
    			name = br.readLine()+"["+s.getInetAddress().getHostAddress()+"]";
    			clients.put(name,this);
    			send( "--------[系统消息:"+name+"上线了!]----------");
    			sendUsers(); // 将用户列表传给客户端
    		}
    		//从信息中分离出用户信息
    		public String[] getUsers_selected(String msg){
    			String str = msg.substring(TOKEN_START.length(), msg.indexOf(TOKEN_END));
    			String[] us = str.split(",");
    			return us;
    		}
    		//从信息中分离出消息
    		public String format(String msg){
    			String str = msg.substring(msg.indexOf(TOKEN_END)+TOKEN_END.length());
    			return str;
    		}
    		
    		//给客户端反馈信息
    		public void send(String msg){
    			Set<String> keys = clients.keySet();
    			boolean isAll =false;
    			if(msg.startsWith(TOKEN_START)){
    				String msg2 = format(msg); //分离出的消息
    				String[] uss = getUsers_selected(msg); //分离出的用户
    				for(String u : uss){
    					if(u.equals(TOKEN_ALL)){
    						isAll = true;
    					}
    				}
    				if(isAll){
    					for (String st : keys) {
    						clients.get(st).out.println(name+":"+msg2+"[公]");
    					}
    				}else{
    					for(String u : uss){
    						clients.get(u).out.println(name+":"+msg2+"[私]");
    					}
    				}
    			}else{
    				for (String st : keys) {
    					clients.get(st).out.println(msg);
    				}
    				
    			}
    		}
    		//给客户端发送用户信息
    		public void sendUsers(){
    			String us = USER_FLAG;
    			Set<String> keys = clients.keySet();
    			for (String st : keys) {
    				us+=(st+",");
    			}
    			
    			send(us);
    		}
    
    
    		@Override
    		public void run() {
    			
    			try {
    				while(true){
    					if(stop){ 
    						break;
    					}
    					String str = br.readLine();
    					if(DISCONNECT_TOKEN.equals(str)){
    						stop();
    						break;
    					}
    					send(str);
    					//System.out.println(name+":"+str);
    				}
    			} catch (SocketException e){
    				stop();
    			} catch (IOException e) {
    				e.printStackTrace();
    			} finally{
    				try {
    					if(s!=null) s.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    			
    		}
    		
    		//停止方法
    		public void stop(){
    			stop = true;
    			out.println(DISCONNECT_TOKEN);
    			clients.remove(name);
    			sendUsers();
    			send("--------[系统消息:"+name+"已经退出!]---------");
    		}
    		
    	}
    	
    	
    	
    }
    

    BUG:  每次打开多个客户端后再关闭其中一个,就会遇到。


    BUG解决办法:


    展开全文
  • tq即时通讯软件北京商之讯软件有限公司开发,是目前最流行在线客服系统,访客不需要下载任何软件或插件,直接点击就能和企业客服人员沟通,这种沟通方式是未来网络沟通发展趋势,适合与普通  一、 关键...
  • C#网络聊天软件

    2008-05-25 17:11:17
    是一个客户端服务器端的聊天软件,启动服务器后,可以启动多个客户端,可以群聊,私聊等,是一个网络通信方面基础实例,用到TCP通信协议,SOCKET,等网络编程方面知识,通过我整理里面详细代码,详细解释...
  • 简易的聊天系统 java 包含了客户端和服务器端源代码,界面设计没有下大功夫,但基本功能还是有的
  • java 聊天软件源码.zip

    2020-04-13 21:05:01
    一款类似于微信开源免费私有聊天软件,可以部署在任意服务器上,搭建自己的聊天服务器,供自己与朋友、用户使用。 特性: 单聊、群聊(含文字、图片、语音等) 端到端加密消息(服务端不可解密,服务器...
  • 暂时还没有 那么完美 不过同一局域网主机端能收到 客户端消息 用网络话 我就不清楚了。 兴趣下载看看呗 源代码
  • 这是我们这学期期末网络编程作业,老师要求我们做课程作业。写得适合纯新手类型代码。适合新手参考。顺便说明一下这个作业是川大...压缩包里面个可运行jar格式文件,你可以运行试试。我编完后,没有发现BUG
  • 飞秋(FeiQ)是一款局域网聊天传送文件绿色软件,它参考了飞鸽传书(IPMSG)和QQ, 完全兼容飞鸽传书(IPMSG)协议,具有局域网传送方便,速度快,操作简单优点,同时具有QQ中一些功能。 功能说明: - 飞秋(FeiQ)是一款...
  • 目前,开发一个供用户使用网络聊天技术门槛并不是很高,也不需要大量资金,国家对于这方面管制和政策也没有太限制,所以当今社会上聊天竞争其实是很激烈,腾讯,网易,新浪都属于自己网络聊天
  • 有没有什么免费的网页视频录制软件?说起视频录制软件,应给没有人不知道吧,通过第三方工具将发生在屏幕上的视频录制下来,但是这样的软件工具非常多。下面就给大家介绍一下这3款软件! 超级捕快 超级捕快是一款...

    有没有什么免费的网页视频录制软件?说起视频录制软件,应给没有人不知道吧,通过第三方工具将发生在屏幕上的视频录制下来,但是这样的软件工具非常多。下面就给大家介绍一下这3款软件!

    超级捕快:点击左侧链接下载

    超级捕快是一款国产的优秀屏幕捕捉软件,超级捕快是国内首个拥有捕捉家庭摄像机DV、数码相机DC、摄像头、TV电视卡、电脑屏幕画面、聊天视频、游戏视频或播放器视频画面并保存为AVI, WMV, MPEG, SWF, FLV等视频文件的优秀录像软件。囊括家庭摄像机/数码相机捕捉录像、摄像头录像、电视卡录像、电脑屏幕录像、QQ视频录像、游戏视频录像或播放器视频录像。

    超级捕快白金版截图

    魔录大师:点击左侧链接下载

    魔录大师是一款专业的屏幕录像制作工具。它基于影音转霸2010的内核开发而成。可以把屏幕上的软件操作过程、网络教学课件、网络影音 、各类游戏录制成高清视频。魔录大师电脑版功能非常强大,并可在视频中,添加自己的Logo图片、文字和字幕,并设置出现的时间、位置、大小和动态效果。它可以把电脑屏幕上的软件操作过程、网络教学课件、网络影音等录制成高清视频。还可以在视频中,添加自己的Logo图片、文字和字幕,以及设置出现的时间、位置、大小和动态效果,并预览等等。

    魔录大师  官方最新版段首LOGO

    超级录屏:点击左侧链接下载

    超级录屏电脑版是一款操作简单,功能强大并且完全免费的录屏软件。超级录屏电脑版支持全屏、窗口、区域三种方式录制,在录制的同时可以将摄像头录制到画面中。超级录屏软件支持对视频文件的截取、分割、合并、添加配音和字幕等功能。

    截图

    展开全文
  • 动机是要了解WebSocket,网购没有书籍,网上资料也比较碎片化,接触这个好几天了,没找到一个深入有效途径。朋友给我一个例程,但是由于搞不定Idea,所以也没有跑起来。网上很多例子,讲解都不完整,不是...
  • 公网qq聊天软件

    2013-03-13 15:40:36
    借用网络上朋友基类,经过1个多月业余时间修改,全部测试通过。 增加了如下功能: 1、心跳包监听;防止网络中断。 2、增加部门分类,TREELIST美化; 3、公网P2P打洞,跨越... 谁解决第二条问题办法可以发给我
  • 类似QQ飞秋的聊天软件(含源码+文档)

    热门讨论 2013-03-05 17:12:15
    VC++6.0+MFC做毕设做网络聊天具(服务端和客户端),包括: 0.普通聊天(文字、图片) 1.聊天室 2.传输文件(断点续传) ...兴趣朋友可以看看,做这个时也没有什么经验,全靠自己网上找资料瞎摸。
  • 对付压力 局域网聊天软件 办法,睡觉!对我来所蛮有效方法,对付搞不定事情,好好睡一觉,第二天满状态再去搞。至于那个问题,我想做是什么?起码不想做重复枯燥无意义因为体制导致无法优化重复性劳动...
  • 几款开源聊天软件对比

    千次阅读 2019-09-20 09:33:35
    duckchat 很容易安装在宝塔面板上, 说明书上说是支持语音,但是我搭建了,不支持,时候图片显示不出来。...支持语音的聊天没有搭建成功,看了介绍。 C++语言编写 https://github.com/irungentoo/toxcore ...
  • 聊天软件开发_0_开篇

    千次阅读 2019-06-17 23:25:52
    2019年五月份时打算写一个聊天软件,开始时考虑提前做好架构再开始干,结果是大概考虑了下就开始肝代码了,断断续续写到了今天,在写到私聊消息处理时突然发现前面一开始对已登录用户服务端并没有记录此ip上登录...
  • 主要实现多人聊天的功能 从哪里开始入手 本人新手 写博客求帮助
  • 当尝试一些新东西时候,它会带来一些好处同时,它也带一些无可避免或有待改进新问题。 1.第一个版本想解决问题: 基于网络分享动态图片互不干扰,当然不要分享小黄图,因为我不知道我申请图床会不会...
  • JAVA 聊天软件教程 引言

    千次阅读 2011-06-15 14:56:00
    前阵子初学了java,然后自己写了个小聊天软件。感觉收获很多。之前看过一些大牛教程,受帮助很多。因此我也产生了自己尝试写教程想法。 写这个教程,不是为了装逼。事实上我还是只小菜鸟,连装逼资格都没有。...
  • 由于需要传输文件需要,准备在这台Linux Mint系统上安装QQ软件,但是在Linux Mint上并没有找到且如何下载类似软件管理器东东。然后搜索网上相关教程,原本腾讯提供Linux版本安装包,好像在下载界面也隐藏...
  • 这是今天面试时候遇到问题,当时由于长时间未接触网络,所以也没有写出来,现在贴出来让自己以后学习使用,并且给需要人看看
  • 关于酷熊,是我上个学期,帮小朋友童鞋做没有做完只是想,也是我做,所以想写下来,但是我没有时间写详解如果兴趣话,下载源码来看吧http://download.csdn.net/source/2221116

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,126
精华内容 450
关键字:

有没有聊天的软件