Server_test.javajava
package 五子棋; public class Server_test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Server_frame sf =new Server_frame(); } }
Server_frame.java緩存
package 五子棋; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.net.ServerSocket; import java.net.Socket; import javax.sound.midi.Receiver; import javax.swing.AbstractAction; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.KeyStroke; public class Server_frame extends JFrame { public static boolean isstart = false; public static Socket socket; Server_panel_center_qipan qipan; Server_panel_west_talk talk; public static ServerSocket server; public Server_frame() { qipan = new Server_panel_center_qipan(); talk = new Server_panel_west_talk(); this.setSize(800, 600); this.setTitle("五子棋_服務器"); this.add(qipan, BorderLayout.CENTER); this.add(talk, BorderLayout.WEST); JMenuBar menuBar = new JMenuBar(); setJMenuBar(menuBar); JMenu gameMenu = new JMenu("遊戲(G)"); // 建立遊戲菜單 JMenu serMenu = new JMenu("幫助(H)"); // 建立遊戲菜單 gameMenu.setMnemonic('G'); // 建立遊戲子菜單及監聽 JMenuItem connect_ser = new JMenuItem("開啓服務器鏈接服務器", 'F'); connect_ser.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK)); connect_ser.addActionListener(new AbstractAction("開啓服務器") { public void actionPerformed(ActionEvent event) { boolean flag = Serverstart(); if (flag == false) { JOptionPane.showMessageDialog(null, "開啓失敗", "錯誤", JOptionPane.ERROR_MESSAGE); return; } else { //服務器開啓成功後開啓線程 Recive_thred rth = new Recive_thred(socket, Server_panel_west_talk.chantAear); rth.start(); } } }); JMenuItem exitItem = new JMenuItem("退出", 'E'); exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_MASK)); exitItem.addActionListener(new AbstractAction("退出") { public void actionPerformed(ActionEvent event) { System.exit(0); } }); gameMenu.add(connect_ser); gameMenu.addSeparator(); gameMenu.add(exitItem); menuBar.add(gameMenu); //客戶端鏈接服務器後纔打開線程 Recive_thred rth = new Recive_thred(socket, Server_panel_west_talk.chantAear); rth.start(); this.setVisible(true); } /* * 開啓服務器,而且等待客戶端鏈接 */ public static boolean Serverstart() { try { // 開啓服務器 server = new ServerSocket(6666); isstart = true; // 表示服務器開啓了額 // 發送客戶端用戶基本信息(用戶名和ip地址) JOptionPane.showMessageDialog(null, "服務器開始於:" + server.getInetAddress().getLocalHost() + ":" + server.getLocalPort()); Server_panel_west_talk.chantAear.append("\n" + "服務器開始於:" + server.getInetAddress().getLocalHost() + ":" + server.getLocalPort() + "\n"); socket=server.accept(); // 等待客戶端鏈接 return isstart; } catch (Exception e) { isstart = false;// 未鏈接上 return false; } } }
Server_panel_center_qipan.java服務器
package 五子棋; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import javax.imageio.ImageIO; import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JPanel; public class Server_panel_center_qipan extends JPanel{ Image board, black, white; int hgex, hgey; // 棋子座標的變量 int bgex, bgey; // 棋子座標的變量 int cou = 0; // 表示連着棋子的數量 public static boolean isrenshu = false; // renshu=true表示自認輸了 public static boolean ishuiqi = false; // huiqi=true表示本身悔棋了 public static boolean isok = false; // baiqi表示本身準備好了 public static boolean ischongxinkaishi = false; // 從新開始? public static boolean ishei = false; // 黑棋下了???ishei=true表示下了 boolean isgamestart = false;// true遊戲開始 private MouseEvent xiaqie; ArrayList<String> h_list = new ArrayList<String>(); // 黑 ArrayList<String> b_list = new ArrayList<String>(); // 白 public Server_panel_center_qipan(){ this.setLayout(null); // 居中 JButton ks = new JButton("開始/暫停"); ks.setBounds(10, 460, 100, 25); this.add(ks); JButton rs = new JButton("認輸"); rs.setBounds(115, 460, 80, 25); this.add(rs); JButton ht = new JButton("後退"); ht.setBounds(200, 460, 80, 25); this.add(ht); JButton cxks = new JButton("從新開始"); cxks.setBounds(290, 460, 100, 25); this.add(cxks); hgex = 0; hgey = 0; bgex = 0; bgey = 0; try { board = ImageIO.read(new File("img/board.gif")); black = ImageIO.read(new File("img/black.gif")); white = ImageIO.read(new File("img/white.gif")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 鼠標監聽器,下棋位置 MouseAdapter mouse = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub super.mouseClicked(e); xiaqie=e; //把鼠標點的位置賦值給全局變量 } }; // 鼠標監聽器--------------開始/暫停 MouseAdapter start = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub super.mouseClicked(e); JOptionPane.showMessageDialog(null, "dianjile"); isok=true; } }; MouseAdapter renshu = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub super.mouseClicked(e); // System.out.println("renshu鼠標按下去了"); if (h_list.size() < 5) JOptionPane.showMessageDialog(null, "這都還沒走五步就認輸?不給,該誰了,請繼續!!"); else { isrenshu = true; } } }; // 後退 MouseAdapter houtui = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub super.mouseClicked(e); if (h_list.size() == 0 || b_list.size() == 0) JOptionPane.showMessageDialog(null, "你妹哦,這都沒開始,哪來的讓你毀"); else { ishuiqi = true; } } }; // 從新開始 MouseAdapter chongxinkaishi = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub super.mouseClicked(e); if (h_list.size() == 0 || b_list.size() == 0) JOptionPane.showMessageDialog(null, "你妹哦,這都沒開始,怎麼會從新有病把"); else { isrenshu=true; } } }; this.addMouseListener(mouse); cxks.addMouseListener(chongxinkaishi); ks.addMouseListener(start); // 開始按鈕與鼠標相連 rs.addMouseListener(renshu); // 認輸按鈕與鼠標相連 ht.addMouseListener(houtui); // 後退按鈕與鼠標相連 } /* * * 獲取鼠標位置 保存鼠標位置到數集裏面 */ public void getmouse(MouseEvent e) { if (isgamestart ) {// !ishei表示黑棋沒下,到白棋 int x = e.getX(); int y = e.getY(); // 減去邊距,除以格子的寬度,取整,獲得第幾格子 hgex = (x - 18) / 25; hgey = (y - 18) / 25; if ((x - 18) % 25 > 12) hgex = hgex + 1; if ((y - 18) % 25 > 12) hgey = hgey + 1; // 把格子的x座標和y座標變成字符串用逗號鏈接,保存到list裏面 if (!h_list.contains(hgex + "," + hgey) && !b_list.contains(hgex + "," + hgey)) { h_list.add(hgex + "," + hgey); ishei = true; //黑棋下了, } repaint(); if (h_list.size() >= 5) { heipanduan(); } } } /* * * 畫棋盤*/ protected void paintComponent(Graphics g) { // TODO Auto-generated method stub super.paintComponent(g); g.drawImage(board, 0, 0, null); // 黑棋獲取鼠標點的位置,畫黑棋 for (int i = 0; i < h_list.size(); i++) { String s = h_list.get(i); // 得到集合裏面的單個字符串 String[] a = s.split(","); hgex = Integer.parseInt(a[0]); hgey = Integer.parseInt(a[1]); g.drawImage(black, hgex * 25 + 18 - 12, hgey * 25 + 18 - 12, null); } // 白棋獲取鼠標點的位置,畫白棋 for (int i = 0; i < b_list.size(); i++) { String s = b_list.get(i); // 得到集合裏面的單個字符串 String[] b = s.split(","); bgex = Integer.parseInt(b[0]); bgey = Integer.parseInt(b[1]); g.drawImage(white, bgex * 25 + 18 - 12, bgey * 25 + 18 - 12, null); } } // 輸贏判斷的方法,黑判斷 public void heipanduan() { // if (h_list.size() > 5) {// 黑棋至少點了五次以後才執行 // f判斷是白棋仍是黑棋,true表示黑棋,false表示白棋 System.out.println("黑棋判斷"); // 黑棋判斷輸贏 for (int i = 0; i < h_list.size(); i++) { cou = 0; // 在判斷每個棋子的時候,都要給cou賦值爲0 String s = h_list.get(i); // 得到集合裏面的單個字符串 String[] a = s.split(","); hgex = Integer.parseInt(a[0]); int tempx = hgex; hgey = Integer.parseInt(a[1]); int tempy = hgey; // 橫向判斷 // 黑棋的某個點x座標+1,Y不變,表示橫向判斷有沒有五子相連 for (int j = 0; j < 4; j++) { hgex++; if (h_list.contains(hgex + "," + hgey)) { cou++; } } System.out.println("黑棋橫向判斷有" + cou + "+1個"); // 縱向判斷 if (cou < 4) { hgex = tempx; hgey = tempy; cou = 0; for (int j = 0; j < 4; j++) { hgey++; if (h_list.contains(hgex + "," + hgey)) cou++; } } System.out.println("黑棋縱向判斷有" + cou + "+1個"); // 右上方向判斷 if (cou < 4) { // 小余4表示橫向沒有五子,就把cou值設爲0,從新開始 cou = 0; hgex = tempx; hgey = tempy; for (int j = 0; j < 4; j++) { hgey--; hgex++; if (h_list.contains(hgex + "," + hgey)) cou++; } } System.out.println("黑棋右上判斷有" + cou + "+1個"); // 右下判斷 if (cou < 4) { cou = 0; hgex = tempx; hgey = tempy; for (int j = 0; j < 4; j++) { hgey++; hgex++; if (h_list.contains(hgex + "," + hgey)) cou++; } } System.out.println("黑棋右下判斷有" + cou + "+1個"); if (cou == 4) { JOptionPane.showMessageDialog(null, "黑棋贏啦"); isgamestart = false; } } } }
Server_panel_west_talk.javaapp
package 五子棋; import java.awt.TextArea; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; public class Server_panel_west_talk extends JPanel{ public static String who="服務器說:"; public static TextArea chantAear; private JTextField txt_message; private String message="ok"; // 要發送客戶端的內容 public static Socket client; Send_message sendmessage; //發送的方法 public Server_panel_west_talk(){ sendmessage = new Send_message(message, Server_frame.socket); JButton jb_send = new JButton("發送"); txt_message = new JTextField("請輸入你要發的內容"); chantAear = new TextArea("------------------\n", 15, 40); MouseAdapter send = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub super.mouseClicked(e); send(); // 服務在本身的textarea輸出信息 } }; jb_send.addMouseListener(send); this.add(chantAear); this.add(txt_message); this.add(jb_send); } private void send() { // TODO Auto-generated method stub if (!Server_frame.isstart) { JOptionPane.showMessageDialog(null, "服務器還未啓動,不能發送消息!", "錯誤", JOptionPane.ERROR_MESSAGE); return; } else { String message = txt_message.getText(); if (message == null || message.equals("")) { JOptionPane.showMessageDialog(null, "消息不能爲空!", "錯誤", JOptionPane.ERROR_MESSAGE); return; } chantAear.append("\n服務器說:" + txt_message.getText() + ""); message = "CHANT" + "-" +who+ txt_message.getText() + "\n"; //System.out.println("服務器要發送的的message爲"+message); sendmessage.send(message, Server_frame.socket); } } }
Client_test.javasocket
package 五子棋; public class Client_test { public static void main(String[] args) { Client_frame cf=new Client_frame(); } }
Client_frame.javaide
package 五子棋; import java.awt.BorderLayout; import java.awt.Frame; import javax.swing.JFrame; public class Client_frame extends JFrame{ Client_panel_center_qipan qipan; Cilent_panel_west_talk talk; public Client_frame(){ qipan=new Client_panel_center_qipan(); talk=new Cilent_panel_west_talk(); this.setSize(1000, 600); //設置關閉 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //設置居中 // this.setLocationRelativeTo(null); this.setTitle("五子棋_客戶端"); this.add(qipan,BorderLayout.CENTER); this.add(talk,BorderLayout.WEST); this.setVisible(true); } }
Client_panel_center_qipan.javaui
package 五子棋; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; import java.util.ArrayList; import javax.imageio.ImageIO; import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JPanel; public class Client_panel_center_qipan extends JPanel{ Image board, black, white; int bgex, bgey; // 白棋子座標的變量 int hgex, hgey; // 黑棋子座標的變量 static boolean xiaqi = true; // xiaqu=true,黑棋下,不然不能下白棋下 int cou = 0; // 表示連着棋子的數量 static int c=1; static boolean f = true; // 判斷是白棋仍是黑棋,true表示黑棋,false表示白棋 static boolean isgamestart = false;// true遊戲開始 private static String message; //發送的消息 Send_message sendmessage; //發送的方法 public static boolean isrenshu = false; // renshu=true表示自認輸了 public static boolean ishuiqi = false; // huiqi=true表示本身悔棋了 public static boolean isok = false; // baiqi表示本身準備好了 public static boolean ischongxinkaishi = false; // 從新開始? public static boolean isbai = false; // 白棋下了??isbai=true private MouseEvent xiaqie; //下白棋的時候,白棋點的鼠標位置的全局變量 ArrayList<String> h_list = new ArrayList<String>(); // 黑 ArrayList<String> b_list = new ArrayList<String>(); // 白 public Client_panel_center_qipan() { sendmessage = new Send_message(message, Cilent_panel_west_talk.socket); this.setLayout(null); // 居中 JButton ks = new JButton("開始/暫停"); ks.setBounds(10, 460, 100, 25); this.add(ks); JButton rs = new JButton("認輸"); rs.setBounds(115, 460, 80, 25); this.add(rs); JButton ht = new JButton("後退"); ht.setBounds(200, 460, 80, 25); this.add(ht); JButton cxks = new JButton("從新開始"); cxks.setBounds(290, 460, 100, 25); this.add(cxks); bgex = 0; bgey = 0; hgex = 0; hgey = 0; try { board = ImageIO.read(new File("img/board.gif")); black = ImageIO.read(new File("img/black.gif")); white = ImageIO.read(new File("img/white.gif")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 鼠標監聽器,下棋位置 MouseAdapter mouse = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub super.mouseClicked(e); // System.out.println("xiaqi鼠標按下去了"); if (isok && Server_panel_center_qipan.isok) xiaqie=e; //將鼠標點的位置賦值給全局變量 getmouse(xiaqie); } }; // 鼠標監聽器--------------開始/暫停 MouseAdapter start = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub super.mouseClicked(e); // System.out.println("kaishi鼠標按下去了"); message="ANNIU"+"-"+"START"; sendmessage.send(message, Cilent_panel_west_talk.socket); } }; MouseAdapter renshu = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub super.mouseClicked(e); // System.out.println("renshu鼠標按下去了"); if (h_list.size() < 5) JOptionPane.showMessageDialog(null, "這都還沒走五步就認輸?不給,該誰了,請繼續!!"); else { if (h_list.size() < 5) JOptionPane.showMessageDialog(null, "這都還沒走五步就認輸?不給,該誰了,請繼續!!"); else { isrenshu = true; } } } }; // 後退 MouseAdapter houtui = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub super.mouseClicked(e); // int x=b_list.size(); if (h_list.size() == 0 || b_list.size() == 0) JOptionPane.showMessageDialog(null, "你妹哦,這都沒開始,哪來的讓你毀"); else { ishuiqi = false; } } }; // 從新開始 MouseAdapter chongxinkaishi = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub super.mouseClicked(e); // int x=b_list.size(); if (h_list.size() == 0 || b_list.size() == 0) JOptionPane.showMessageDialog(null, "你妹哦,這都沒開始,怎麼會從新有病把"); else { isrenshu = true; } } }; this.addMouseListener(mouse); ks.addMouseListener(start); // 開始按鈕與鼠標相連 rs.addMouseListener(renshu); // 認輸按鈕與鼠標相連 ht.addMouseListener(houtui); // 後退按鈕與鼠標相連 cxks.addMouseListener(chongxinkaishi); } public static boolean clientisok(){ if(c==2) isok=true; return isok; } /* * * 獲取鼠標位置 保存鼠標位置到數集裏面 */ public void getmouse(MouseEvent e) { if (isgamestart && !isbai && Server_panel_center_qipan.ishei) {// !ishei表示黑棋沒下,到白棋 int x = e.getX(); int y = e.getY(); // 減去邊距,除以格子的寬度,取整,獲得第幾格子 bgex = (x - 18) / 25; bgey = (y - 18) / 25; if ((x - 18) % 25 > 12) bgex = bgex + 1; if ((y - 18) % 25 > 12) bgey = bgey + 1; // 把格子的x座標和y座標變成字符串用逗號鏈接,保存到list裏面 if (!b_list.contains(hgex + "," + hgey) && !b_list.contains(hgex + "," + hgey)) { b_list.add(bgex + "," + bgey); isbai = true; Server_panel_center_qipan.ishei = false; } repaint(); if (h_list.size() >= 5) { baipanduan(); } } } @Override protected void paintComponent(Graphics g) { // TODO Auto-generated method stub super.paintComponent(g); g.drawImage(board, 0, 0, null); // 畫黑棋 for (int i = 0; i < h_list.size(); i++) { String s = h_list.get(i); // 得到集合裏面的單個字符串 String[] a = s.split(","); hgex = Integer.parseInt(a[0]); hgey = Integer.parseInt(a[1]); g.drawImage(black, hgex * 25 + 18 - 12, hgey * 25 + 18 - 12, null); } // 畫白棋 for (int i = 0; i < b_list.size(); i++) { String s = b_list.get(i); // 得到集合裏面的單個字符串 String[] b = s.split(","); bgex = Integer.parseInt(b[0]); bgey = Integer.parseInt(b[1]); g.drawImage(white, bgex * 25 + 18 - 12, bgey * 25 + 18 - 12, null); } } /* * * 白棋判斷輸贏 */ public void baipanduan() { if (isgamestart == true) { while (true) { System.out.print("開始判斷了"); System.out.println("f=false,白棋下了"); // if (h_list.size() > 5) {// 白棋至少點了五次以後才執行 // f判斷是白棋仍是黑棋,true表示黑棋,false表示白棋 System.out.println("白棋判斷"); // 白棋判斷輸贏 for (int i = 0; i < b_list.size(); i++) { cou = 0; // 在判斷每個棋子的時候,都要給cou賦值爲0 String s = b_list.get(i); // 得到集合裏面的單個字符串 String[] a = s.split(","); bgex = Integer.parseInt(a[0]); int tempx = bgex; bgey = Integer.parseInt(a[1]); int tempy = bgey; // 橫向判斷 // 黑棋的某個點x座標+1,Y不變,表示橫向判斷有沒有五子相連 for (int j = 0; j < 4; j++) { bgex++; if (b_list.contains(bgex + "," + bgey)) { cou++; } } System.out.println("白棋橫向判斷有" + cou + "+1個"); // 縱向判斷 if (cou < 4) { bgex = tempx; bgey = tempy; cou = 0; for (int j = 0; j < 4; j++) { bgey++; if (b_list.contains(bgex + "," + bgey)) cou++; } } System.out.println("白棋縱向判斷有" + cou + "+1個"); // 右上方向判斷 if (cou < 4) { // 小余4表示橫向沒有五子,就把cou值設爲0,從新開始 cou = 0; bgex = tempx; bgey = tempy; for (int j = 0; j < 4; j++) { bgey--; bgex++; if (b_list.contains(bgex + "," + bgey)) cou++; } } System.out.println("白棋右上判斷有" + cou + "+1個"); // 右下判斷 // 右下判斷 if (cou < 4) { cou = 0; bgex = tempx; bgey = tempy; for (int j = 0; j < 4; j++) { bgey++; bgex++; if (b_list.contains(bgex + "," + bgey)) cou++; } } System.out.println("白棋右下判斷有" + cou + "+1個"); if (cou == 4) { JOptionPane.showMessageDialog(null, "白棋贏啦"); isgamestart = false; return; } } } } } }
Cilent_panel_west_talk.javathis
package 五子棋; import java.awt.TextArea; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; public class Cilent_panel_west_talk extends JPanel { public static boolean connect = false; // 給出鏈接服務器的boolean,true表示鏈接成功了 static TextArea chatAear; // 全部消息內容區域 public static Socket socket; // 鏈接服務器的socket = new // Socket(serverip.getText(), 5555); private String message="ok"; // 要發送給服務器的內容 Send_message sendmessage; //發送的方法 private String who = "客戶端說:"; private JTextField txt_message; // 將要發送給服務器的內容 private JTextField serverip; // 服務器的IP地址 public Cilent_panel_west_talk() { sendmessage = new Send_message(message, socket); chatAear = new TextArea("----------------------\n", 15, 40); txt_message = new JTextField("請輸入你要發送的消息"); JButton jb_connectserver = new JButton("鏈接服務器"); serverip = new JTextField("127.0.0.1"); JButton jb_send = new JButton("發送"); MouseAdapter connect = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub super.mouseClicked(e); if (connectserver()) { JOptionPane.showMessageDialog(null, "我成功鏈接!!!!"); message = "CHANT" + "-" + "我是客戶端,我已經鏈接成功了" + "\n"; System.out.println("客戶端的message爲"+message); //客戶端鏈接服務器後纔打開線程 Recive_thred rth = new Recive_thred(socket, chatAear); rth.start(); sendmessage.send(message, socket); } } }; // 給服務器發送消息按鈕 MouseAdapter send = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub super.mouseClicked(e); chatAear.append("\n客戶端說"+txt_message.getText()); message = "CHANT" + "-" + who + txt_message.getText() + "\n"; System.out.println("客戶端要發送的的message爲"+message); sendmessage.send(message, socket); } }; this.add(serverip); jb_connectserver.addMouseListener(connect); this.add(jb_connectserver); jb_send.addMouseListener(send); this.add(chatAear); this.add(txt_message); this.add(jb_send); } public boolean connectserver() { try { // 獲取輸入的IP地址,而且進行鏈接 socket = new Socket(serverip.getText(), 6666); connect = true; return connect; } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); chatAear.append("\n鏈接失敗"); } return false; } }
Recive_thred.javaspa
package 五子棋; import java.awt.TextArea; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JTextField; public class Recive_thred extends Thread { private Socket socket; TextArea chantAear; public Recive_thred(Socket socket, TextArea chantAear) { this.socket = socket; this.chantAear = chantAear; } @Override public void run() { // TODO Auto-generated method stub super.run(); InputStream is; try { is = socket.getInputStream(); BufferedReader reader = new BufferedReader( new InputStreamReader(is)); while (true) { String msg = reader.readLine(); System.out.println("recive線程類接受到的信息" + msg); String[] split = msg.split("-"); System.out.println("split[0]==" + split[0] + "=="); System.out.println("split[1]==" + split[1] + "=="); if (split[0] == "ANNIU") { // 按鈕控制 if (split[1].equals("START")) { // 對方按下開始按鈕 System.out.println("客戶端按下開始了"); } else if (split[1].equals("TOUXIANG")) { // 按下認輸按鈕 } else if (split[1].equals("HUIQI")) { // 按下悔棋按鈕 } else if (split[1].equals("CHONGXINLAI")) { // 按下從新來按鈕 } } if (split[0].equals("CHANT")) { // 聊天控制 System.out.println(split[1]); // chantAear.append(split[1]); chantAear.append("\n"+split[1]); } if (split[0] == "XIAQI")// a==2 { // 下棋控制 } // System.out.println("recive類接受錯誤"); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Send_message.java.net
package 五子棋; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; import java.util.Scanner; public class Send_message { Socket socket; String message; public Send_message(String message, Socket socket) { this.message = message; this.socket = socket; } public void send(String message, Socket socket) { OutputStream os; try { os = socket.getOutputStream(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os)); System.out.println("send類裏面要發送給對方的消息是"+message); //用輸出流把它給輸出去 bw.write(message); //令起一行 bw.newLine(); bw.flush(); // 清空緩存 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }