其實這個問題你應該先想一下socket到底是一個什么東西,在網(wǎng)絡編程中socket到底用來做什么的。socket:在操作系統(tǒng)內(nèi)核中它代表網(wǎng)絡連接的一個端點(endpoint),在應用程序中它代表一個打開的文件。socket?pair唯一確定的一條網(wǎng)絡連接,socket?pair就是客戶端socket和服務端socket的一個組合。也就是客戶端ip和port與服務端ip和port的組合。一條網(wǎng)絡連接也就是一條通信的信道,tcp連接代表的信道是全雙工的。以信道來講,邏輯上就存在兩個管道來代表輸出與輸入來發(fā)送和接收信息。
溧陽網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)自2013年起到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選成都創(chuàng)新互聯(lián)。
那么在應用程序上我們就可以拿到這2個管道來完成socket之間的通信。
以你的應用來看輸出流fos就代表著圖中的紅色管道,那么在服務端就應該是這個樣的。
Scoket?connSock?=?serverSocket.accept();//connSock代表著服務端的Socket
InputStream?is?=?connSock.getInputStream();//輸入流is代表圖中的紅色管道
OutputStrea?os?=?connSock.getOutputStream();//輸出流os代表圖中的綠色管道
在服務端有一個字節(jié)緩沖區(qū)來存放從is讀取的字節(jié)數(shù)據(jù)
byte[]?buffer?=?new?byte[1024];
然后服務端讀取數(shù)據(jù)來填充這個字節(jié)緩沖區(qū)
is.read(buffer);//比如這樣
然后就根據(jù)你的需求來操作這個buffer了。
然后把處理過后的數(shù)據(jù)通過os發(fā)送給客戶端。os就是圖中的那個綠色管道
os.write(處理過后的數(shù)據(jù));
利用題主所述的架構,最簡單直接的方式是,用js在作者頁面寫一個定時任務,每0.1秒(時間間隔自定義,合適就好)向后臺發(fā)送一個請求(利用AJAX來發(fā)請求),請求參數(shù)就是作者作畫的數(shù)據(jù)(當然還有這劇游戲的唯一標識),然后spring后臺接收請求,向mysql數(shù)據(jù)庫中寫入數(shù)據(jù)。然后在答者頁面每0.1秒向后臺發(fā)送請求(AJAX發(fā)送),spring后臺接收到請求后,在數(shù)據(jù)庫里根據(jù)游戲唯一標識 ,查到目前這局游戲的作畫數(shù)據(jù),然后返回response,相應參數(shù)就是作者作畫數(shù)據(jù)。答者頁面的AJAX異步請求回調(diào)函數(shù)中,對成功返回的請求做出處理,局部刷新HTML頁面元素。
WebSocket只不過是一種新的輪子,沒有這玩意兒的時候,人們處理這種問題通常有兩種方式 1、直接用Socket;2、使用HTTP輪詢;上述解決辦法就是最簡單的HTTP輪詢。
上面描述的實現(xiàn)方案還不完整,不過大致思路是這樣。
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class caishuzi extends JFrame implements ActionListener
{
private static final long serialVersionUID = 1L;
private JPanel textpanel, buttonpanel, fopanel, downpanel;
private JButton btn;
private JTextField jtinput, jttishi;
private JLabel lbnum0, lbnum, lbtishi, lbinput;
private JTextArea tafo;
private Boolean start = false, jisuan = false, jinru = false;
MenuBar mb = new MenuBar();
Menu filemenu = new Menu("文件"), systemmenu = new Menu("系統(tǒng)"),
helpmenu = new Menu("幫助");
MenuItem newfile = new MenuItem("文件"), openfile = new MenuItem("打開"),
closefile = new MenuItem("關閉"), quit = new MenuItem("退出"),
inputsecret = new MenuItem("輸入密碼"), help = new MenuItem("幫助"),
inputcishu = new MenuItem("輸入限制次數(shù)");
char[] c = new char[4];
String strsecret = "123";
int xianzhi=8;
caishuzi()
{
super("猜數(shù)字");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//this.setLocationRelativeTo(null);
// 設置菜單
filemenu.add(newfile);
filemenu.add(openfile);
filemenu.addSeparator();
filemenu.add(closefile);
newfile.setEnabled(false);
openfile.setEnabled(false);
closefile.setEnabled(false);
inputsecret.addActionListener(this);
inputcishu.addActionListener(this);
inputcishu.setEnabled(false);
systemmenu.add(inputsecret);
systemmenu.add(inputcishu);
systemmenu.add(quit);
quit.addActionListener(this);
help.addActionListener(this);
helpmenu.add(help);
mb.add(filemenu);
mb.add(systemmenu);
mb.add(helpmenu);
this.setMenuBar(mb);
Container c = this.getContentPane();
BorderLayout b = new BorderLayout();
b.setVgap(10);
c.setLayout(b);
settextpanel();
c.add(textpanel, BorderLayout.NORTH);
setbuttonpanel();
setfopanel();
setdownpanel();
c.add(downpanel, BorderLayout.CENTER);
this.setSize(680,350);
//this.setResizable(false);
//this.pack();
this.setVisible(true);
}
void settextpanel()
{
textpanel = new JPanel();
textpanel.setLayout(new FlowLayout());
lbinput = new JLabel("輸入:");
jtinput = new JTextField("", 10);
jtinput.setEditable(false);
jttishi = new JTextField(30);
lbnum = new JLabel("8");
lbnum0 = new JLabel("剩余次數(shù):");
lbtishi = new JLabel("提示:");
jttishi.setEditable(false);
textpanel.add(lbinput);
textpanel.add(jtinput);
textpanel.add(lbtishi);
textpanel.add(jttishi);
textpanel.add(lbnum0);
textpanel.add(lbnum);
}
void setbuttonpanel()
{
String[] str =
{ "7", "8", "9", "4", "5", "6", "1", "2", "3", "確定", "0", "退格" };
buttonpanel = new JPanel();
buttonpanel.setLayout(new GridLayout(4, 3, 4, 8));
for (int i = 0; i str.length; i++)
{
btn = new JButton(str[i]);
btn.addActionListener(this);
buttonpanel.add(btn);
}
}
void setfopanel()
{
JButton btnright = new JButton("正確答案");
JPanel p = new JPanel();
btnright.addActionListener(this);
fopanel = new JPanel();
fopanel.setLayout(new BorderLayout());
btn = new JButton("開始");
btn.addActionListener(this);
tafo = new JTextArea(15,12);
p.setLayout(new GridLayout(1, 2));
p.add(btn);
p.add(btnright);
fopanel.add(p, BorderLayout.NORTH);
tafo.setEditable(false);
fopanel.add(tafo, BorderLayout.CENTER);
}
void setdownpanel()
{
downpanel = new JPanel();
downpanel.setLayout(new GridLayout(1, 2, 30, 0));
downpanel.add(buttonpanel);
downpanel.add(fopanel);
}
public static void main(String[] args)
{
new caishuzi();
}
public void actionPerformed(ActionEvent e)
{
String s = e.getActionCommand();
if (s.equals("退出"))
{
int i = JOptionPane.showConfirmDialog(this, "確認退出?", "",
JOptionPane.YES_NO_OPTION);
//System.out.println(i);
if (i == 0)
{
System.exit(0);
}
}
if (s.equals("幫助"))
{
JOptionPane.showMessageDialog(this,
"猜數(shù)字游戲,可以輸入限制次數(shù),密碼為123,\n在菜單:系統(tǒng)——輸入密碼 中輸入!");
}
if (s.equals("輸入密碼"))
{
while (true)
{
String inputValue = "";
inputValue = JOptionPane.showInputDialog(this, "輸入密碼");
// System.out.println(inputValue);
if (inputValue == null)
return;
if (inputValue.equals(strsecret))
{
jinru = true;
jttishi.setText("密碼正確,點擊開始");
inputsecret.setEnabled(false);
break;
} else
{
int i = JOptionPane.showConfirmDialog(this, "密碼錯誤,重新輸入?",
"", JOptionPane.YES_NO_OPTION);
if (i == 1)
break;
}
}
}
if (!jinru)
{
jttishi.setText("請輸入密碼:");
return;
}
if (s.equals("開始") || s.equals("重玩"))
{
StringBuffer sb = new StringBuffer("0123456789");
for (int i = 0; i c.length; i++)
{
int n = (int) (Math.random() * sb.length());
c[i] = sb.charAt(n);
sb.deleteCharAt(n);
}
btn.setText("重玩");
start = true;
lbnum.setText(String.valueOf(xianzhi));
jisuan = false;
//System.out.println(c);
jttishi.setText("請輸入四不重復的數(shù):");
jtinput.setText("");
tafo.setText("");
}
if (s點抗 pareTo("0") = 0 s點抗 pareTo("9") = 0)
{
jisuan = false;
if (!start)
jttishi.setText("點擊開始!");
else
{
if (jtinput.getText().length() 4)
{
if (jtinput.getText().indexOf(s) 0)
{
jtinput.setText(jtinput.getText() + s);
if (jtinput.getText().length() 4)
jttishi.setText("還差"
+ (4 - jtinput.getText().length()) + "個數(shù)");
else
{
jttishi.setText("輸入正確,點擊確定");
jisuan = true;
}
} else
jttishi.setText("不能輸入重復的數(shù)");
} else
{
jttishi.setText("不能超過四個數(shù),點擊確定");
jisuan = true;
}
}
}
if (s.equals("退格") start)
{
if (jtinput.getText().length() 0)
{
jtinput.setText(jtinput.getText().substring(0,
jtinput.getText().length() - 1));
jttishi.setText("還差" + (4 - jtinput.getText().length()) + "個數(shù)");
}
jisuan = false;
}
if (s.equals("確定"))
{
if (!start)
{
jttishi.setText("還沒開始呢!");
return;
}
if (!jisuan)
{
jttishi.setText("輸入不正確!");
return;
}
int numa = 0, numb = 0;
char[] c1 = jtinput.getText().toCharArray();
// System.out.println(c1);
for (int i = 0; i c1.length; i++)
{
for (int j = 0; j c.length; j++)
{
if (c1[i] == c[j] i != j)
{
numb++;
}
if (c1[i] == c[j] i == j)
{
numa++;
}
}
}
tafo.append(jtinput.getText() + "\t" + numa + "A" + numb + "B"
+ "\n");
jtinput.setText("");
jisuan = false;
if (numa == 4)
{
jttishi.setText("答對了,再來一局吧!");
start = false;
btn.setText("開始");
tafo.append("恭喜,答對了! ");
} else
{
lbnum.setText(String
.valueOf(Integer.valueOf(lbnum.getText()) - 1));
if (Integer.valueOf(lbnum.getText()) == 0)
{
String str = "";
jttishi.setText("機會沒有了!很遺憾");
for (int i = 0; i c.length; i++)
str += c[i];
tafo.append("超過限制次數(shù),失??!" + "正確答案是:" + str);
start = false;
btn.setText("開始");
} else
jttishi.setText("輸入四個數(shù):");
}
}
if (s.equals("正確答案"))
{
if (!start)
{
jttishi.setText("還沒開始呢!");
return;
}
String str = "";
for (int i = 0; i c.length; i++)
str += c[i];
tafo.append("正確答案是:" + str);
jttishi.setText("重新開始吧!");
start = false;
jisuan = false;
btn.setText("開始");
}
if (!start)
{
inputcishu.setEnabled(true);
} else
inputcishu.setEnabled(false);
if (s.equals("輸入限制次數(shù)"))
{
while (true)
{
try
{
String str = JOptionPane.showInputDialog(this,
"輸入小于15的整數(shù)數(shù)字:");
if (str == null)
return;
if (Integer.valueOf(str) = 15 Integer.valueOf(str) 0)
{
xianzhi=Integer.valueOf(str);
lbnum.setText(String.valueOf(xianzhi));
break;
} else
{
int i = JOptionPane.showConfirmDialog(this, "輸入錯誤,重試?",
"", JOptionPane.YES_NO_OPTION);
if (i == 1)
break;
}
} catch (Exception ex)
{
int i = JOptionPane.showConfirmDialog(this, "輸入錯誤,重試?", "",
JOptionPane.YES_NO_OPTION);
if (i == 1)
break;
}
}
}
}
}
我做課程設計的最初代碼 參考下吧 運行時先看幫助~
具體如下:
連連看的小源碼
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];//游戲按鈕數(shù)組
JButton exitButton,resetButton,newlyButton; //退出,重列,重新開始按鈕
JLabel fractionLable=new JLabel("0"); //分數(shù)標簽
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)是程序員用開發(fā)工具所支持的語言寫出來的源文件,是一組由字符、符號或信號碼元以離散形式表示信息的明確的規(guī)則體系。
對于字符和Unicode數(shù)據(jù)的位模式的定義,此模式代表特定字母、數(shù)字或符號(例如 0x20 代表一個空格,而 0x74 代表字符“t”)。一些數(shù)據(jù)類型每個字符使用一個字節(jié);每個字節(jié)可以具有 256 個不同的位模式中的一個模式。
在計算機中,字符由不同的位模式(ON 或 OFF)表示。每個字節(jié)有 8 位,這 8 位可以有 256 種不同的 ON 和 OFF 組合模式。對于使用 1 個字節(jié)存儲每個字符的程序,通過給每個位模式指派字符可表示最多 256 個不同的字符。2 個字節(jié)有 16 位,這 16 位可以有 65,536 種唯一的 ON 和 OFF 組合模式。使用 2 個字節(jié)表示每個字符的程序可表示最多 65,536 個字符。
單字節(jié)代碼頁是字符定義,這些字符映射到每個字節(jié)可能有的 256 種位模式中的每一種。代碼頁定義大小寫字符、數(shù)字、符號以及 !、@、#、% 等特殊字符的位模式。每種歐洲語言(如德語和西班牙語)都有各自的單字節(jié)代碼頁。
雖然用于表示 A 到 Z 拉丁字母表字符的位模式在所有的代碼頁中都相同,但用于表示重音字符(如"é"和"á")的位模式在不同的代碼頁中卻不同。如果在運行不同代碼頁的計算機間交換數(shù)據(jù),必須將所有字符數(shù)據(jù)由發(fā)送計算機的代碼頁轉換為接收計算機的代碼頁。如果源數(shù)據(jù)中的擴展字符在接收計算機的代碼頁中未定義,那么數(shù)據(jù)將丟失。
如果某個數(shù)據(jù)庫為來自許多不同國家的客戶端提供服務,則很難為該數(shù)據(jù)庫選擇這樣一種代碼頁,使其包括所有客戶端計算機所需的全部擴展字符。而且,在代碼頁間不停地轉換需要花費大量的處理時間。
當前題目:你畫我猜java代碼 你畫我猜規(guī)則steam
文章URL:http://www.rwnh.cn/article18/ddehjdp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供面包屑導航、建站公司、外貿(mào)建站、網(wǎng)頁設計公司、網(wǎng)站收錄、電子商務
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)