⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chessthread.java

📁 实现了一个网络五子棋的对弈程序
💻 JAVA
字号:
/**
 * 一个客户端用户线程. 处理用户落子的点击事件处理,及消息发送.
 */
package chessface;

import java.io.IOException;
import java.util.StringTokenizer;

public class chessThread extends Thread {
    chessPad chesspad;

    public chessThread(chessPad chesspad) {
        this.chesspad = chesspad;
    }

    /**
     * 发送消息
     */
    public void sendMessage(String sndMessage) {
        try {
            // 利用由socket提供的输出流向服务器发送信息
            chesspad.outData.writeUTF(sndMessage);
        } catch (Exception ea) {
            System.out.println("chessThread.sendMessage:" + ea);
        }
    }

    /**
     * 接收消息,具体就是落子信息,包括落子位置,颜色等.
     */
    public void acceptMessage(String recMessage) {
        // 如果收到的消息以“/chess”开头,将其中的坐标信息和颜色信息提取出来
        if (recMessage.startsWith("/chess ")) {
            StringTokenizer userToken = new StringTokenizer(recMessage, " ");
            String chessToken;
            String[] chessOpt = {"-1", "-1", "0"};
            int chessOptNum = 0;
            // 使用Tokenizer将空格分隔的字符串分成三段
            while (userToken.hasMoreTokens()) {
                chessToken = (String) userToken.nextToken(" ");
                if (chessOptNum >= 1 && chessOptNum <= 3) {
                    chessOpt[chessOptNum - 1] = chessToken;
                }
                chessOptNum++;
            }
            // 将己方的走棋信息如棋子摆放的位置、棋子的颜色为参数,使用netChessPaint函数
            // 是对方客户端也看到己方的落子位置。
            chesspad.netChessPaint(Integer.parseInt(chessOpt[0]), Integer.parseInt(chessOpt[1]), Integer
                    .parseInt(chessOpt[2]));

        } else if (recMessage.startsWith("/yourname ")) {
            chesspad.chessSelfName = recMessage.substring(10);
        } else if (recMessage.equals("/error")) {
            chesspad.statusText.setText("错误:没有这个用户,请退出程序,重新加入");
        }
    }

    public void run() {
        String message = "";
        try {
            while (true) {
                //之所以要开线程、是因为这里socket读取服务器发来的信息会阻塞。。
                message = chesspad.inData.readUTF();
                //解析处理消息
                acceptMessage(message);
            }
        } catch (IOException es) {
            //读取异常..读者可以试着添加相应处理,比如像服务器发回相应的信息提示等,
            //从而可提高程序运行可靠性
        }
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -