十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
利用题主所述的架构,最简单直接的方式是,用js在作者页面写一个定时任务,每0.1秒(时间间隔自定义,合适就好)向后台发送一个请求(利用AJAX来发请求),请求参数就是作者作画的数据(当然还有这剧游戏的唯一标识),然后spring后台接收请求,向mysql数据库中写入数据。然后在答者页面每0.1秒向后台发送请求(AJAX发送),spring后台接收到请求后,在数据库里根据游戏唯一标识 ,查到目前这局游戏的作画数据,然后返回response,相应参数就是作者作画数据。答者页面的AJAX异步请求回调函数中,对成功返回的请求做出处理,局部刷新HTML页面元素。
十多年的夏县网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整夏县建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联公司从事“夏县网站设计”,“夏县网站推广”以来,每个客户项目都认真落实执行。
WebSocket只不过是一种新的轮子,没有这玩意儿的时候,人们处理这种问题通常有两种方式 1、直接用Socket;2、使用HTTP轮询;上述解决办法就是最简单的HTTP轮询。
上面描述的实现方案还不完整,不过大致思路是这样。
计算器代码:package a;import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SunnyCalculator implements ActionListener {
JFrame f;
JTextField tResult;
JButton bNumber;
JButton bOperator;
JButton bOther;
JButton bM;
boolean isDouble = false;
int opFlag = -1;
static double t1 = 0, t2 = 0, t3 = 0, result = 0;
static int opflag1 = -1, opflag2 = -1, flag = 0, resflag = 1;
int preOp, currentOp = 0;
double op1 = 0, op2 = 0;
double n3;
StringBuffer buf = new StringBuffer(20);
StringBuffer str = new StringBuffer();
public SunnyCalculator() {
f = new JFrame("计算器");
Container contentPane = f.getContentPane();
JMenuBar mBar = new JMenuBar();
mBar.setOpaque(true);
f.setJMenuBar(mBar);
contentPane.setLayout(new BorderLayout());
JPanel pTop = new JPanel();
tResult = new JTextField("0.", 26);
tResult.setHorizontalAlignment(JTextField.RIGHT);
tResult.setEditable(false);
pTop.add(tResult);
contentPane.add(pTop, BorderLayout.NORTH);
JPanel pBottom = new JPanel();
pBottom.setLayout(new BorderLayout());
JPanel pLeft = new JPanel();
pLeft.setLayout(new GridLayout(5, 1, 3, 3));
bM = new JButton(" ");
bM.setEnabled(false);
pLeft.add(bM); pBottom.add(pLeft, BorderLayout.WEST);
JPanel pRight = new JPanel();
pRight.setLayout(new BorderLayout());
JPanel pUp = new JPanel();
pUp.setLayout(new GridLayout(1, 3, 3, 0)); bOther = new JButton("BackSpace");
bOther.addActionListener(this);
bOther.setForeground(Color.red);
bOther.setMargin(new Insets(3, 0, 3, 5));
pUp.add(bOther); bOther = new JButton("CE");
bOther.addActionListener(this);
bOther.setForeground(Color.red);
pUp.add(bOther);
JPanel pDown = new JPanel();
pDown.setLayout(new GridLayout(4, 5, 3, 2));
bNumber = new JButton("7");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new Insets(3, 3, 3, 3));
pDown.add(bNumber);
bNumber = new JButton("8");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new Insets(3, 3, 3, 3));
pDown.add(bNumber);
bNumber = new JButton("9");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new Insets(3, 3, 3, 3));
pDown.add(bNumber);
bOperator = new JButton("/");
bOperator.setForeground(Color.red);
bOperator.addActionListener(this);
bOperator.setMargin(new Insets(3, 0, 3, 0));
pDown.add(bOperator);
bOperator = new JButton("sqrt");
bOperator.addActionListener(this);
bOperator.setForeground(Color.red);
bOperator.setMargin(new Insets(3, 0, 3, 0));
pDown.add(bOperator);
bNumber = new JButton("4");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new Insets(3, 3, 3, 3));
bNumber.setHorizontalTextPosition(JButton.LEFT);
pDown.add(bNumber);
bNumber = new JButton("5");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new Insets(3, 3, 3, 3));
pDown.add(bNumber);
bNumber = new JButton("6");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new Insets(3, 3, 3, 3));
pDown.add(bNumber);
bOperator = new JButton("*");
bOperator.setForeground(Color.red);
bOperator.addActionListener(this);
bOperator.setMargin(new Insets(3, 3, 3, 3));
pDown.add(bOperator);
bOperator = new JButton("%");
bOperator.setForeground(Color.blue);
bOperator.addActionListener(this);
bOperator.setMargin(new Insets(3, 3, 3, 3));
pDown.add(bOperator);
bNumber = new JButton("1");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new Insets(3, 3, 3, 3));
pDown.add(bNumber);
bNumber = new JButton("2");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new Insets(3, 3, 3, 3));
pDown.add(bNumber);
bNumber = new JButton("3");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new Insets(3, 3, 3, 3));
pDown.add(bNumber);
bOperator = new JButton("-");
bOperator.setForeground(Color.red);
bOperator.addActionListener(this);
bOperator.setMargin(new Insets(3, 3, 3, 3));
pDown.add(bOperator);
bOperator = new JButton("1/x");
bOperator.setForeground(Color.blue);
bOperator.addActionListener(this);
pDown.add(bOperator);
bNumber = new JButton("0");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new Insets(3, 3, 3, 3));
pDown.add(bNumber);
bOperator = new JButton("+/-");
bOperator.setForeground(Color.blue);
bOperator.addActionListener(this);
bOperator.setMargin(new Insets(3, 3, 3, 3));
pDown.add(bOperator);
bOperator = new JButton(".");
bOperator.setForeground(Color.blue);
bOperator.addActionListener(this);
bOperator.setMargin(new Insets(3, 3, 3, 3));
pDown.add(bOperator);
bOperator = new JButton("+");
bOperator.setForeground(Color.blue);
bOperator.addActionListener(this);
bOperator.setMargin(new Insets(3, 3, 3, 3));
pDown.add(bOperator);
bOperator = new JButton("=");
bOperator.setForeground(Color.blue);
bOperator.addActionListener(this);
bOperator.setMargin(new Insets(3, 3, 3, 3));
pDown.add(bOperator);
pRight.add(pUp, BorderLayout.NORTH);
pRight.add(pDown, BorderLayout.SOUTH);
pBottom.add(pRight, BorderLayout.EAST);
contentPane.add(pBottom, BorderLayout.SOUTH);
f.setSize(new Dimension(320, 256));
f.setResizable(false);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e) {
String s = e.getActionCommand();
if (s.equals("CE")) {
tResult.setText("0.");
} else if (s.equals("BackSpace")) {
if (!tResult.getText().trim().equals("0.")) {
if (str.length() != 1 str.length() != 0) {
tResult.setText(str.delete(str.length() - 1, str.length())
.toString());
} else {
tResult.setText("0.");
str.setLength(0);
}
}
op2 = Double.parseDouble(tResult.getText().trim());
} else if (s.equals("1/x")) {
String temp = tResult.getText().trim();
double dtemp = Double.parseDouble(temp);
tResult.setText("" + 1 / dtemp);
} else if (s.equals("sqrt")) {
String temp = tResult.getText().trim();
double dtemp = Double.parseDouble(temp);
tResult.setText("" + Math.sqrt(dtemp));
} else if (s.equals("+")) {
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 1;
op2 = 0;
tResult.setText("" + op1);
} else {
currentOp = preOp;
preOp = 1;
switch (currentOp) {
case 1:
op1 += op2;
tResult.setText("" + op1);
break;
case 2:
op1 -= op2;
tResult.setText("" + op1);
break;
case 3:
op1 *= op2;
tResult.setText("" + op1);
break;
case 4:
op1 /= op2;
tResult.setText("" + op1);
break;
}
}
} else if (s.equals("-")) {
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 2;// op1=op2;op2=0;
tResult.setText("" + op1);
} else {
currentOp = preOp;
preOp = 2;
switch (currentOp) {
case 1:
op1 = op1 + op2;
tResult.setText("" + op1);
break;
case 2:
op1 = op1 - op2;
tResult.setText("" + op1);
break;
case 3:
op1 = op1 * op2;
tResult.setText("" + op1);
break;
case 4:
op1 = op1 / op2;
tResult.setText("" + op1);
break;
}
}
} else if (s.equals("*"))// *
{
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 3;// op1=op2;op2=1;
tResult.setText("" + op1);// op1=op2;
} else {
currentOp = preOp;
preOp = 3;
switch (currentOp) {
case 1:
op1 = op1 + op2;
tResult.setText("" + op1);
break;
case 2:
op1 = op1 - op2;
tResult.setText("" + op1);
break;
case 3:
op1 = op1 * op2;
tResult.setText("" + op1);
break;
case 4:
op1 = op1 / op2;
tResult.setText("" + op1);
break;
}
}
} else if (s.equals("/"))
{
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 4;// op2=1;
tResult.setText("" + op1);// op1=op2;
} else {
currentOp = preOp;
preOp = 4;
switch (currentOp) {
case 1:
op1 = op1 + op2;
tResult.setText("" + op1);
break;
case 2:
op1 = op1 - op2;
tResult.setText("" + op1);
break;
case 3:
op1 = op1 * op2;
tResult.setText("" + op1);
break;
case 4:
op1 = op1 / op2;
tResult.setText("" + op1);
break;
}
}
} else if (s.equals("="))// =
{
if (currentOp == 0) {
str.setLength(0);
tResult.setText("" + op2);
} else {
str.setLength(0);
currentOp = preOp;
switch (currentOp) {
case 1:
op1 = op1 + op2;
tResult.setText("" + op1);
break;
case 2:
op1 = op1 - op2;
tResult.setText("" + op1);
break;
case 3:
op1 = op1 * op2;
tResult.setText("" + op1);
break;
case 4:
op1 = op1 / op2;
tResult.setText("" + op1);
break;
}
currentOp = 0;
op2 = 0;
}
} else if (s.equals(".")) {
isDouble = true;
if (tResult.getText().trim().indexOf('.') != -1)
;
else {
if (tResult.getText().trim().equals("0")) {
str.setLength(0);
tResult.setText((str.append("0" + s)).toString());
}
else {
tResult.setText((str.append(s)).toString());
}
}
} else if (s.equals("0"))
{
if (tResult.getText().trim().equals("0.")) {
} else {
tResult.setText(str.append(s).toString());
op2 = Double.parseDouble(tResult.getText().trim());
}
} else {
tResult.setText(str.append(s).toString());
op2 = Double.parseDouble(tResult.getText().trim());
if (currentOp == 0)
op1 = op2;
}
} public static void main(String[] args) {
new SunnyCalculator();
}
}
具体如下:
连连看的小源码
package Lianliankan;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class lianliankan implements ActionListener
{
JFrame mainFrame; //主面板
Container thisContainer;
JPanel centerPanel,southPanel,northPanel; //子面板
JButton diamondsButton[][] = new JButton[6][5];//游戏按钮数组
JButton exitButton,resetButton,newlyButton; //退出,重列,重新开始按钮
JLabel fractionLable=new JLabel("0"); //分数标签
JButton firstButton,secondButton; //
分别记录两次62616964757a686964616fe59b9ee7ad9431333335326239被选中的按钮
int grid[][] = new int[8][7];//储存游戏按钮位置
static boolean pressInformation=false; //判断是否有按钮被选中
int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戏按钮的位置坐标
int i,j,k,n;//消除方法控制
代码(code)是程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。
对于字符和Unicode数据的位模式的定义,此模式代表特定字母、数字或符号(例如 0x20 代表一个空格,而 0x74 代表字符“t”)。一些数据类型每个字符使用一个字节;每个字节可以具有 256 个不同的位模式中的一个模式。
在计算机中,字符由不同的位模式(ON 或 OFF)表示。每个字节有 8 位,这 8 位可以有 256 种不同的 ON 和 OFF 组合模式。对于使用 1 个字节存储每个字符的程序,通过给每个位模式指派字符可表示最多 256 个不同的字符。2 个字节有 16 位,这 16 位可以有 65,536 种唯一的 ON 和 OFF 组合模式。使用 2 个字节表示每个字符的程序可表示最多 65,536 个字符。
单字节代码页是字符定义,这些字符映射到每个字节可能有的 256 种位模式中的每一种。代码页定义大小写字符、数字、符号以及 !、@、#、% 等特殊字符的位模式。每种欧洲语言(如德语和西班牙语)都有各自的单字节代码页。
虽然用于表示 A 到 Z 拉丁字母表字符的位模式在所有的代码页中都相同,但用于表示重音字符(如"é"和"á")的位模式在不同的代码页中却不同。如果在运行不同代码页的计算机间交换数据,必须将所有字符数据由发送计算机的代码页转换为接收计算机的代码页。如果源数据中的扩展字符在接收计算机的代码页中未定义,那么数据将丢失。
如果某个数据库为来自许多不同国家的客户端提供服务,则很难为该数据库选择这样一种代码页,使其包括所有客户端计算机所需的全部扩展字符。而且,在代码页间不停地转换需要花费大量的处理时间。
写了一个代码,代码如下,可以进行参考
public class sum {
public static void main(String[] args) {
//创建一个Scanner的对象input
Scanner input = new Scanner(System.in);
//提示用户输入数据
System.out.print("请输入一个整数");
//将输入的值赋给n
int n = input.nextInt();
//定义变量接收计算后的和
int sum = 0;
//利用循环进行求和
for (int i = 0; i = n; i++) {
sum+=i;
}
//输出最后的和
System.out.println("从0一直到"+n+"的所有整数的和是:"+sum);
}
}
其实这个问题你应该先想一下socket到底是一个什么东西,在网络编程中socket到底用来做什么的。socket:在操作系统内核中它代表网络连接的一个端点(endpoint),在应用程序中它代表一个打开的文件。socket pair唯一确定的一条网络连接,socket pair就是客户端socket和服务端socket的一个组合。也就是客户端ip和port与服务端ip和port的组合。一条网络连接也就是一条通信的信道,tcp连接代表的信道是全双工的。以信道来讲,逻辑上就存在两个管道来代表输出与输入来发送和接收信息。
那么在应用程序上我们就可以拿到这2个管道来完成socket之间的通信。
以你的应用来看输出流fos就代表着图中的红色管道,那么在服务端就应该是这个样的。
Scoket connSock = serverSocket.accept();//connSock代表着服务端的Socket
InputStream is = connSock.getInputStream();//输入流is代表图中的红色管道
OutputStrea os = connSock.getOutputStream();//输出流os代表图中的绿色管道
在服务端有一个字节缓冲区来存放从is读取的字节数据
byte[] buffer = new byte[1024];
然后服务端读取数据来填充这个字节缓冲区
is.read(buffer);//比如这样
然后就根据你的需求来操作这个buffer了。
然后把处理过后的数据通过os发送给客户端。os就是图中的那个绿色管道
os.write(处理过后的数据);