精华内容
下载资源
问答
  • 多人小程序开发——第一步:工具准备及协作问题 1.注册账号 登录后台,开发设置中有AppID。 个人账号只能开发一个项目,因此AppID与你的微信号绑定,你是这个App的管理者。你可以用这个AppID进行代码编写,同时你...

    多人小程序开发——第一步:工具准备及协作问题

    1.注册账号

    登录后台,开发设置中有AppID。
    在这里插入图片描述
    个人账号只能开发一个项目,因此AppID与你的微信号绑定,你是这个App的管理者。你可以用这个AppID进行代码编写,同时你可以添加其他你的队友为开发者。这样他们也可以用你的AppID进行项目开发
    在这里插入图片描述

    2.下载工具

    下载地址
    一般都是下载稳定版
    安装完成后,即可新建项目,每个项目都要有一个appid。写完代码,点击上传之后,这个代码所对应的开发版本就会出现在后台了在这里插入图片描述
    点击版本管理,可以查看开发版本,审核版本和线上版本。可以理解为b站的草稿,审核中,已发布。
    在这里插入图片描述

    3.代码管理

    可以用github也可以用微信自带的代码管理,详细适用方法见链接。

    代码管理入口如下:左上角工具,微信开发者代码管理

    在这里插入图片描述

    现在就可以开始学习代码啦!!!

    展开全文
  • 多人聊天小程序

    2018-11-03 21:26:10
    包含客户端与服务端,实现了登录,注册,用户上线或离线提示,选择好友进行聊天等功能。VS2017下开发。
  • Java语言socket基础编程多人聊天
  • 用java写的TCP多人聊天小程序,有源码和程序及文档!有良好的注释!
  • C#多人聊天小程序

    2012-11-19 10:16:32
    一个简单的多人聊天窗口的程序,利用tcp网络传输协议进行通信
  • 主要为大家详细介绍了socket多人聊天程序C语言版,具有一定的参考价值,感兴趣的伙伴们可以参考一下
  • 主要为大家详细介绍了socket多人聊天程序C语言版第二篇,具有一定的参考价值,感兴趣的伙伴们可以参考一
  • Socket多人聊天小程序

    2015-06-23 09:26:38
    利用Java通过Socket网络编程实现多个客户端同时登录聊天
  • 多人买票程序

    2019-10-23 14:17:33
    //用while做的自动售票程序,机器是反复执行的,来一个人买完下一个人继续买,如果钱够支付的就打印票并找零,否则继续输入累加再判断; /** * @param args */ public static void main(String[] args) { // ...

    import java.util.Scanner;

    public class sale {
    //用while做的自动售票程序,机器是反复执行的,来一个人买完下一个人继续买,如果钱够支付的就打印票并找零,否则继续输入累加再判断;
    /**
    * @param args
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    int sum=0;
    do
    {Scanner aa=new Scanner(System.in);

    int pay=aa.nextInt();
    sum=sum+pay;
    if(sum>=10)
    {
    System.out.println(“打印车票******”);
    System.out.println("******");
    System.out.println("******");
    System.out.println("******");
    System.out.println(“找零:”+(sum-10));
    sum=0;
    }
    else
    {
    System.out.println(“支付金额不足”);
    }

    }while(true);
    }
    }

    展开全文
  • Java-多人聊天小程序

    千次阅读 2020-03-08 10:03:33
    } catch (BindException e) { textArea.setText("端口2222被占用,请关闭对应的程序!\n"); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e....

    上图啦!!!

    结构
    首先运行:
    Server.java

    然后启动:
    Client.java

    在这里插入图片描述

    最后退出客户端:

    在这里插入图片描述

    代码实现

    Client

    package chat;
    
    import javax.swing.*;
     
    public class Client {
    	
    	public static void main(String[] args) {// 使用Windows的界面风格
    		try {
    			UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		new TCPClient().start();
    	}
    }
    

    Server

    package chat;
    
    
    import java.awt.event.*;
    import java.io.*;
    import java.net.*;
    import java.text.SimpleDateFormat;
    import java.util.*;
    import javax.swing.*;
     
    public class Server implements ActionListener {
    	
    	private static final int SERVER_PORT = 2222;
    	
    	private ServerSocket server;
    	private JFrame frame;
    	private JPanel panel;
    	private JTextArea textArea;
    	private JScrollPane scrollPane;
    	private JTextField textField;
    	private JButton button;
    	
    	private boolean isStarted = false; // 服务器是否启动
    	private List<ChatroomClient> clients = new ArrayList<ChatroomClient>();
    	
    	public Server() {
    		
    		frame = new JFrame("服务器");
    		panel = new JPanel();
    		
    		textArea = new JTextArea();
    		textArea.setEditable(false);
    		textArea.setLineWrap(true);
    		scrollPane = new JScrollPane(textArea);
    		scrollPane.setBounds(5, 5, 275, 290);
    		scrollPane.setBorder(BorderFactory.createLoweredSoftBevelBorder());
    		
    		textField = new JTextField();
    		textField.setBounds(6, 305, 210, 30);
    		button = new JButton("发送");
    		button.setBounds(220, 305, 60, 30);
    		
    		button.addActionListener(this);
    		textField.addActionListener(this);
    		
    		panel.add(scrollPane);
    		panel.add(textField);
    		panel.add(button);
    		panel.setLayout(null);
    		
    		frame.add(panel);
    		frame.setSize(300, 400);
    		frame.setLocation((1366 - 640) >> 1, (768 - 400) >> 1);
    		frame.setVisible(true);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		
    	}
    	
    	public static void main(String[] args) {
    		// 使用Windows的界面风格
    		try {
    			UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		new Server().serverStart();
    	}
    	
    	public void serverStart() {
    		
    		while (!isStarted) { // 无限循环尝试启动服务器
    			try {
    				server = new ServerSocket(SERVER_PORT);
    				isStarted = true;
    				Thread.sleep(500);
    			} catch (BindException e) {
    				textArea.setText("端口2222被占用,请关闭对应的程序!\n");
    			} catch (IOException e) {
    				e.printStackTrace();
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    		
    		textArea.append("服务器启动,等待客户端连接……\n");
    		try {
    			// 无限循环检测是否有客户端加入,有则加到list
    			while (isStarted) {
    				Socket s = server.accept();
    				ChatroomClient client = new ChatroomClient(s);
    				clients.add(client);
    				client.start();
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				server.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    		
    	}
    	
    	// 服务器发送消息
    	public void send() {
    		
    		if (textField.getText().length() < 1) { // 没有输入东西
    			return;
    		} else if (clients.size() == 0) {
    			textArea.append("无客户端连接!\n");
    			return;
    		}
    		
    		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    		String s = "服务器    " + dateFormat.format(new Date()) + "\n    " + textField.getText() + "\n";
    		textArea.append(s);
    		
    		// 循环给列表中的客户端发送信息
    		for (int i = 0; i < clients.size(); ++i) {
    			ChatroomClient client = clients.get(i);
    			client.send(s);
    		}
    		textField.setText(null);
    	}
    	
    	public void actionPerformed(ActionEvent arg0) {
    		send();
    	}
    	
    	// Inner Class ChatroomClient
    	class ChatroomClient extends Thread {
    		
    		private Socket client;
    		private DataInputStream in;
    		private DataOutputStream out;
    		
    		//private boolean isConnected = false;
    		
    		// 客户端初始化
    		public ChatroomClient(Socket client) {
    			this.client = client;
    			try {
    				in = new DataInputStream(client.getInputStream());
    				out = new DataOutputStream(client.getOutputStream());
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
     
    			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    			textArea.append("客户端已连接  " + dateFormat.format(new Date()) + "\n");
    			textArea.append("地址:" + client.getInetAddress().getHostAddress() + "\n端口:" + client.getPort() + "\n\n");
    		}
    		
    		// 发送消息
    		public void send(String str) {
    			
    			try {
    				out.writeUTF(str);
    				out.flush();
    			} catch (IOException e) {
    				clients.remove(this);
    				textArea.append("客户端已退出,从列表删除!\n");
    			}
    		}
    		
    		public void run() {
    			
    			try {
    				while (true) {
    					textArea.setCaretPosition(textArea.getDocument().getLength()); // 显示JTextArea最末
    					
    					String str = in.readUTF();
    					//str = str.substring(0, 3) + (clients.indexOf(this) + 1) + str.substring(3);
    					textArea.append(str);
    					
    					for (int i = 0; i < clients.size(); ++i) {
    						ChatroomClient client = clients.get(i);
    						client.send(str);
    					}
    					
    					Thread.sleep(100); // 每100ms读取对方信息一次
    				}
    			} catch (IOException e) {
    				textArea.append("客户端断开连接!\n");
    				clients.remove(this);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			} finally {
    				clients.remove(this);
    				try {
    					if (in != null)
    						client.close();
    					if (out != null)
    						client.close();
    					if (client != null)
    						client.close();
    				} catch (IOException e) {
    					e.printStackTrace();	}	}	}	}	}
    

    TCPClient

    package chat;
    
    import java.awt.Color;
    import java.awt.event.*;
    import java.io.*;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import javax.swing.*;
    
    
    class TCPClient extends Thread implements ActionListener, MouseListener {
    	
    	private String des = "127.0.0.1"; // 服务器地址
    	private int port = 2222; // 服务器端口
    	
    	private Socket client;
    	private DataInputStream in;
    	private DataOutputStream out;
    	
    	private JFrame frame;
    	private JPanel panel;
    	private JTextArea textArea;
    	private JScrollPane scrollPane;
    	private JTextField textField;
    	private JTextField tfDes, tfPort;
    	private JLabel label1, label2, addrChange;
    	private JButton button;
    	
    	private boolean isConnected = false; // 是否连接上
    	
    	public TCPClient() {
    		
    		frame = new JFrame("客户端");
    		panel = new JPanel();
    		
    		textArea = new JTextArea();
    		textArea.setEditable(false);
    		textArea.setLineWrap(true);
    		scrollPane = new JScrollPane(textArea);
    		scrollPane.setBounds(5, 5, 275, 290);
    		scrollPane.setBorder(BorderFactory.createLoweredSoftBevelBorder());
    		
    		textField = new JTextField();
    		textField.setBounds(6, 305, 210, 30);
    		textField.addActionListener(this);
    		button = new JButton("发送");
    		button.setBounds(220, 305, 60, 30);
    		button.addActionListener(this);
    		
    		label1 = new JLabel("服务器地址:");
    		label1.setBounds(10, 340, 75, 20);
    		tfDes = new JTextField(des);
    		tfDes.setBounds(75, 341, 80, 20);
    		tfDes.setBorder(null);
    		
    		label2 = new JLabel("端口:");
    		label2.setBounds(160, 340, 40, 20);
    		tfPort = new JTextField(Integer.toString(port));
    		tfPort.setBounds(190, 341, 35, 20);
    		tfPort.setBorder(null);
    		
    		addrChange = new JLabel("连接");
    		addrChange.setForeground(Color.BLUE);
    		addrChange.setBounds(235, 337, 30, 20);
    		addrChange.setBorder(BorderFactory.createRaisedBevelBorder());
    		addrChange.addMouseListener(this);
    		
    		panel.add(scrollPane);
    		panel.add(textField);
    		panel.add(button);
    		panel.add(label1);
    		panel.add(tfDes);
    		panel.add(label2);
    		panel.add(tfPort);
    		panel.add(addrChange);
    		panel.setLayout(null);
    		
    		frame.add(panel);
    		frame.setSize(300, 400);
    		frame.setLocation(1366 >> 1, (768 - 400) >> 1);
    		frame.setVisible(true);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
    	
    	// 发送消息
    	public void send() {
    		
    		if (textField.getText().length() < 1) { // 没有输入东西
    			return;
    		} else if (out == null || client.isClosed()) {
    			textArea.append("没有与服务器连接!\n");
    			return;
    		}
    		try {
    			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    			out.writeUTF(InetAddress.getLocalHost().getHostName() + "    " + dateFormat.format(new Date()) + "\n    " + textField.getText() + "\n");
    			out.flush();
    			//textArea.append("客户端    " + new Date().toLocaleString() + "\n    " + textField.getText() + "\n");
    			textField.setText(null);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		
    	}
    	
    	public void actionPerformed(ActionEvent arg0) {
    		send();}
    	
    	public void mouseClicked(MouseEvent arg0) {}
    	
    	public void mouseEntered(MouseEvent arg0) {}
    	
    	public void mouseExited(MouseEvent arg0) {}
    
    	public void mousePressed(MouseEvent arg0) {
    		addrChange.setBorder(BorderFactory.createLoweredBevelBorder());
    	}
    
    	public void mouseReleased(MouseEvent arg0) {
    		addrChange.setBorder(BorderFactory.createRaisedBevelBorder());
    		if (!tfDes.getText().matches(
    				"([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}")
    				|| !tfPort.getText().matches(
    				"[0-9]|[1-9]\\d|[1-9]\\d{2}|[1-9]\\d{3}|[1-5]\\d{4}|6[0-4]\\d{3}|65[0-4]\\d{2}|655[0-2]\\d|6553[0-5]")) {
    			textArea.append("请输入正确的地址和端口!!\n");
    			return;
    		}
    		String tmpd = tfDes.getText();
    		int tmpp = Integer.parseInt(tfPort.getText());
    		if (des.equals(tmpd) && port == tmpp) {
    			if (isConnected == true)
    				textArea.append("已经和指定服务器连上,请不要重复连接!\n");
    			return;
    		}
    		des = tmpd;
    		port = tmpp;
    		try {
    			if (in != null)
    				in.close();
    			if (out != null)
    				out.close();
    			if (client != null)
    				client.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		if (isConnected == false) {
    			textArea.append("正在连接服务器……\n");
    			textArea.append("目标地址:" + des + "\n");
    			textArea.append("目标端口:" + port + "\n");
    		} else {
    			textArea.append("用户中断当前连接!\n");
    		}
    		isConnected = false;
    	}
    	
    	public void run() {
    		
    		while (true) {
    			
    			textArea.append("正在连接服务器……\n");
    			textArea.append("目标地址:" + des + "\n");
    			textArea.append("目标端口:" + port + "\n");
    			while (!isConnected) {
    				try {
    					client = new Socket(des, port);
    					in = new DataInputStream(client.getInputStream());
    					out = new DataOutputStream(client.getOutputStream());
    					isConnected = true;
    					Thread.sleep(500);
    				} catch (IOException e) {
    					continue;
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}
    			}
    			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    			textArea.append("连接服务器成功!" + dateFormat.format(new Date()) + "\n\n");
    			
    			try {
    				while (isConnected) {
    					textArea.setCaretPosition(textArea.getDocument().getLength()); // 显示JTextArea最末
    					textArea.append(in.readUTF()); // 每100ms读取对方信息一次
    					Thread.sleep(100);
    				}
    			} catch (IOException e) {
    				textArea.append("与服务器失去连接!\n\n");
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			} finally {
    				try {
    					if (in != null)
    						in.close();
    					if (out != null)
    						out.close();
    					if (client != null)
    						client.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    				isConnected = false;
    			}}}}
    
    展开全文
  • 用Java编写的Chat聊天小程序。用于初学者学习Java基础很有帮助。
  • 大型软件设计实验:多人点餐小程序—第二轮迭代报告 1、需求再分析 为确保多人聚会时点餐活动顺利且愉悦的进行,本小组决定开发一微信小程序以实现同桌食客同时点餐并在一定程度上确保全体就餐人员获得满意的点餐...

    1、需求再分析

    为确保多人聚会时点餐活动顺利且愉悦的进行,本小组决定开发一微信小程序以实现同桌食客同时点餐并在一定程度上确保全体就餐人员获得满意的点餐体验。该小程序需具备以下基础功能:
    食客端:
    ① 创建房间:创建虚拟房间,同桌的就餐人员可进入该房间中进行点餐;
    ② 多人同时点餐:菜品添加删减信息实时、同步的出现在同房间所有人员的客户端中;
    ③ 邀请好友:通过微信分享的功能将其他用餐人员拉入同一点餐房间中,此功能可邀请尚未到场的朋友加入共同点菜;
    ④ 标记“我”的忌口:每一食客可选择“我”不吃的配菜、调料等,以及“我”能接受的辣度,该信息将显示在房间信息之中;
    ⑤ 标记“我”不喜欢菜品:在菜单中按下“不喜欢”按钮表示自己不想吃此道菜或者对该菜品过敏,该标记信息会实时、同步出现在该房间全体成员的客户端中;
    ⑥ 结账:可选择仅支付个人所点菜品、AA制买单及请客等选项,并跳转微信或支付宝付款界面完成结账。
    ⑦ 智能推荐点单:根据本点餐房间中每个人口味的喜好(忌口)、历史点菜的记录与用餐人数等因素生成一份推荐菜单,以供参考。

    商家端:
    ① 导入菜单:通过信息录入导入菜品价格、图片、类别及特征等信息;
    ② 订单查询:获得并查看顾客点单信息。

    2、上轮迭代问题分析

    通过展示后对其他组成员的采访,本小组产品经理获得诸多反馈,随后进行小组会议,针对每一问题提出解决方案:
    ① 界面
    问题:界面元素繁多拥挤。
    解决方案:将仅有的一个页面细分为多个分页。
    ② 用户交互
    问题:交互方式复杂、不清晰,非常不友好。
    解决方案:更改界面结构,采用指向明确、简介美观的小图标。
    ③ 功能
    问题:他人点菜时无消息提示。
    解决方案:采用信息弹出的方式对其他用户进行提示。
    ④ 数据库
    问题:数据库组织不够清晰。
    解决方案:重新规划数据存储方案,实现按食客端按房间组织,商家端按商家组织。

    3、第二轮进度

    3.1 更改篇

    3.1.1 界面更改

    前端设计是根据需求重新设计界面,以下为设计手稿:

    按照手稿,并添加首页,实现如下界面:

    3.2 数据库更改

    因在云函数中创建的Collection的权限为仅创建者可读写,该权限下监听函数无法起作用,因此在每次建立房间时新建表格是不明智的决定(无法监听)。本小组经商讨后重新组织数据,除菜单外建立的Collection有members(就餐人员),message(消息),order(点单), rooms(房间偏好)。以下图片展示各个Collection中的项目格式。

    Menu:
    在这里插入图片描述
    order:
    在这里插入图片描述
    message:
    在这里插入图片描述
    rooms:
    在这里插入图片描述

    3.3 代码结构更改

    统一代码风格(非promise风格),整理云函数结构。下图为云函数列表:

    3.2 新增篇

    3.2.1 实现邀请好友

    实现向好友分享房间,邀请好友进入同一房间进行点餐。

    3.2.2 实现消息同步

    当一人点餐时,点餐消息可以显示在多人客户端中。

    3.2.3 实现房间偏好的选择

    4、第三轮迭代目标

    ① 实现快速进入房间;
    ② 实现选择不喜欢后该项目变灰以向房间所有成员进行提醒;
    ③ 实现商家端菜单的导入(现在是直接向数据库提交);
    ④ UI的细节优化;
    ⑤ 简单的推荐算法雏形。

    展开全文
  • 大型软件设计实验:多人点餐小程序—第三轮迭代报告1、需求重述2、上轮迭代分析3、第三轮迭代新增功能3.1 实现快速进入房间3.2 实现不喜欢菜品的同步显示、3.3 实现简单商家端功能4、总体完成情况 1、需求重述 为...
  • 在微信小程序中搜索 腾讯视频云 可以加载到我们的演示用小程序,其中 多人音视频 功能可用于体验和测试多人音视频通话功能。出于 UI 美观和画面大小的考虑,Demo 中仅支持了最多四人的视频通话,您可以通过修改...
  • linux c++select多人聊天程序

    千次阅读 2013-02-01 15:35:32
    比较简单的多人聊天程序,可直接运行。 主要是实现功能。没有界面也没有多余功能,只是实现群聊天的功能。c/s模式。 server端用select多路复用来做,可以接受多个客户端连接。client端启动2个线程控制发送和接受...
  • 基于UNIX C ,一个最基础最简单的C/S模式程序
  • 一个使用java的Socket实现的多人聊天程序,有简单的用户界面,代码有详细注释,并附有打包好的jar文件,欢迎大家下载学习!
  • Java swing+socket实现多人聊天程序

    千次阅读 2018-11-13 23:52:58
    swing+socket实现多人聊天程序 1.准备工作 先看效果: 客户端项目结构图: 服务端项目结构图:   2.运行原理 服务端 先开一个线程serverListerner,线程中开启一个Serversocket 用Serversocket.accept()...
  • 很多网站都提供了在线匿名聊天的小功能,下面小编基于python的django框架实现一个多人在线匿名聊天的小程序,具体实现代码大家参考下本
  • NULL 博文链接:https://jimieaaa.iteye.com/blog/1879316
  • 一个简单的局域网多人聊天系统 包含源代码 和可执行的JAVA程序 全部用JAVA实现 适合学习聊天编程的初学者参考
  • 大型软件设计实验:多人点餐小程序—第一轮迭代报告1 需求分析2 产品定义2.1 产品介绍2.2 产品功能简介3 开发平台4 项目分工5 产品设计5.1 界面设计5.2 数据库设计6 第一轮迭代进展6.1 第一轮迭代目标6.2 第一轮迭代...
  • ​​ 制作视频征集活动,还在为视频收稿不方便,多人视频投稿、多人上传视频不方便犯愁,今天为大家带来一款专门做收集、征集、投票评选的小程序,帮大家解决视频投稿、视频收稿中的难题。 【fotoo征集一下】...
  • 微信在去年年底开放了小程序直播接口。小程序从仅适用于阅读、生活服务、工具等应用的流量入口,成为了许多音视频应用的又一个新平台。新功能的开放让更多应用可以利用微信的熟人社交链为应用快速拉新,提供便捷的...
  • 但是经过实践发现,其复杂度远远超过TCP写的程序。总结如下:1.C-C聊天没问题,逻辑简单,代码量少,效率高,少了三路握手,包重传和检验。2.C-S-C(1V1的时候)聊天问题就开始来了,首先,因为没有accept,所以server...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,103
精华内容 23,641
关键字:

多人小程序