Java中的多人游戏。将客户端(玩家)连接到其他客户端创建的游戏

如何解决Java中的多人游戏。将客户端(玩家)连接到其他客户端创建的游戏?另一个客户端由于其防火墙而无法连接到客户端A。您可以创建两种主要的网络:服务器客户端点对点但是客户端可以将一些数据保存到服务器,服务器可以将它们发送

如何解决Java中的多人游戏。将客户端(玩家)连接到其他客户端创建的游戏?

另一个客户端由于其防火墙而无法连接到客户端A。

您可以创建两种主要的网络:

  • 服务器客户端

  • 点对点

但是客户端可以将一些数据保存到服务器,服务器可以将它们发送给所有客户端(您不需要点对点网络就可以让客户端B向客户端A发送一些数据)。

示例:客户端B将其地图位置发送到服务器,服务器将数据发送给所有客户端,因此客户端A能够在客户端B的位置绘制字符图块。

要将两台PC连接在一起,您需要将端口从服务器的调制解调器转发到用作服务器的PC,然后从用作服务器的PC的防火墙打开该端口。

您还可以在这里看看如何使用python创建一个多人游戏,我举了一个示例,其中客户端可以将它们与IRC连接在一起,并可以玩井字游戏(因此您不必管理服务器) )。我在这篇文章的结尾添加了一个Java示例。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.socket;
import java.util.Date;


public class Server
{
    public static void main(String[] args) throws Exception
    {
        ServerSocket listener = new ServerSocket(4000);
        String line;
        try
        {
            while (true)
            {
                Socket socket = listener.accept();
                BufferedReader readerChannel = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                BufferedWriter writerChannel = new BufferedWriter(new OutputStreamWriter(socket.getoutputStream()));
                try
                {
                    writerChannel.write(new Date().toString() + "\n\r");
                    writerChannel.flush();

                    while ((line = readerChannel.readLine()) != null)
                    {
                        System.out.println(line);
                    }
                }
                finally
                {
                    socket.close();
                }
            }
        }
        finally
        {
            listener.close();
        }
    }
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.socket;
import java.util.Date;


public class Client
{
    public static void main(String[] args) throws Exception
    {
        Socket socket = new Socket("127.0.0.1", 4000);
        BufferedWriter writerChannel = new BufferedWriter(new OutputStreamWriter(socket.getoutputStream()));
        BufferedReader readerChannel = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line;

        writerChannel.write(new Date().toString() + "\n\r");
        writerChannel.flush();

        while ((line = readerChannel.readLine()) != null)
        {
            System.out.println(line);
        }
    }
}
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;


public class Client
{
    public static void main(String[] args) throws Exception
    {
        SSLSocketFactory socketBuilder = (SSLSocketFactory) SSLSocketFactory.getDefault();
        SSLSocket socket = (SSLSocket) socketBuilder.createSocket("127.0.0.1", 4000);
    }
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;


public class Client
{
    public static void main(String[] args) throws Exception
    {
        SSLSocketFactory socketBuilder = (SSLSocketFactory) SSLSocketFactory.getDefault();
        SSLSocket socket = (SSLSocket) socketBuilder.createSocket("irc.freenode.net", 6697);
        BufferedWriter writerChannel = new BufferedWriter(new OutputStreamWriter(socket.getoutputStream()));
        BufferedReader readerChannel = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        String line, computerName, nick, login, channel = "#bot", channelPassword = "";
        long id = 1;

        computerName = java.net.InetAddress.getLocalHost().getHostName();
        nick = computerName + "_" + id;
        login = computerName + "_" + id;
        writerChannel.write("NICK " + nick + "\r\n"); // Join IRC with a specific Nick
        writerChannel.write("USER " + login + " 8 * :" + login + " \r\n"); // Join IRC with a specific User
        writerChannel.flush();

        while ((line = readerChannel.readLine()) != null)
        {
            if (line.indexOf("004") != -1) // If connected
            {
                break;
            }
            else if (line.indexOf("433") != -1) // If Nick already in use
            {
                id++;
                nick = computerName + "_" + id;
                login = computerName + "_" + id;
                writerChannel.write("NICK " + nick + "\r\n");
                writerChannel.write("USER " + login + " 8 * :" + login + " \r\n");
                writerChannel.flush();
            }
        }

        writerChannel.write("JOIN " + channel + " " + channelPassword + "\r\n"); // Join a channel
        writerChannel.flush();

        while ((line = readerChannel.readLine()) != null)
        {
            try
            {
                line = line.substring(line.indexOf("#"));
                channel = line.substring(0, line.indexOf(" "));

                if (line.toLowerCase().startsWith("ping")) // avoid ping time-out
                {
                    writerChannel.write("PONG :" + line.substring(5) + "\r\n");
                    writerChannel.flush();
                }
                else if (line.toLowerCase().contains("!ping"))
                {
                    writerChannel.write("PRIVMSG " + channel + " :pong\r\n");
                    writerChannel.flush();
                }
                else if (line.toLowerCase().contains("!join"))
                {
                    String newChannel = line.substring(line.indexOf("!join") + 6);
                    int stringPosition;
                    if ((stringPosition = newChannel.indexOf(" ")) != -1)
                    {
                        String newPassword = newChannel.substring(stringPosition + 1);
                        newChannel = newChannel.substring(0, stringPosition);
                        writerChannel.write("JOIN " + newChannel + " " + newPassword + "\r\n");
                        writerChannel.flush();
                    }
                    else
                    {
                        writerChannel.write("JOIN " + newChannel + "\r\n");
                        writerChannel.flush();
                    }
                }
                else if (line.toLowerCase().contains("!leave"))
                {
                    writerChannel.write("PART " + channel + "\r\n");
                    writerChannel.flush();
                }
                else if (line.toLowerCase().contains("!quit"))
                {
                    writerChannel.write("QUIT\r\n");
                    writerChannel.flush();
                    System.exit(0);
                }
            }
            catch (Exception e)
            {

            }
        }
    }
}

我无法为您提供对等网络的示例,因为我从未这样做过。这确实很困难,您必须在互联网上进行大量研究。

  • https://docs.oracle.com/javase/7/docs/api/java/net/Socket.html

  • https://docs.oracle.com/javase/tutorial/networking/sockets/

  • http://www.oracle.com/technetwork/java/socket-140484.html

  • 您需要一个多线程服务器来处理许多不同的连接。

提示-我已经回答了一些类似的问题。 即使编程语言有时有所不同,我也会为您提供链接,但逻辑总是相同的,因此可以为您提供帮助:

  • 在python中创建多人游戏

  • Xcode Mass Multiplayer(不是您可能在想的)

  • MMO如何处理真人游戏的每一刻为成千上万的玩家计算和发送数据包?

解决方法

我正在开发多人游戏,无法找出如何将其他客户端连接到所创建的游戏。我的意思是客户端A创建与服务器的套接字连接,其他客户端(A,B
…)如何连接到客户端A?有人可以帮我吗?

PS我是网络编程的新手,因此,如果您可以举一些例子,我将不胜感激。

声明:该文观点仅代表作者本人,《家在公租房生活网》系信息发布平台,家在公租房生活网仅提供信息存储空间服务。
(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫

相关推荐

  • 属虎和马的人,属鸡是属虎的贵人

    属虎和属马的婚姻配吗,生个什么生肖的宝宝好?属马和属虎的人合不合马和虎属相合不合马和虎属相相配吗属虎和属马属相婚配好不好? 相处注意事项生肖马和虎婚姻相配吗虎和马合适吗 属虎的和属马的相配结果会怎么样属虎和属马的婚姻配吗,生个什么生肖的宝宝好?是非常般配的两个人性格是互补的,在一起特别幸福

    2023年10月1日
    00
  • 姜绵陆景时

    经典之作《姜绵陆景时》,热血开启!主人公有姜绵陆景时,是作者大大佚名倾力所打造的一篇好书,小说主线剧情为:更多的嘲讽和辱骂铺天盖地席卷而来。姜绵又惊又怕,在赵瑜儿的安排下,开始不停找医生做修复,可修复到最后,她的脸变得僵硬怪异……

    资讯 2023年9月4日
    00
  • 卦十一地天泰详解,解卦是看主卦还是变卦

    《易经》第十一卦 泰卦 启示:小往大来,君子之道《易经》第十一卦 泰卦 地天泰 坤上乾下 泰卦,象征通泰、平安。乾为天,坤为地,天气下降,地气上升,天地阴阳交合,万物的生养之道畅通。泰为通,泰象征通泰。即安泰亨通。通泰之时,阴者哀而往,阳者盛而来,所以既吉祥又顺利。 泰卦卦辞:泰:小往大来,

    2023年9月20日
    00
  • 农家小胖妞,搬空夫家后转运了

    在农家小胖妞,搬空夫家后转运了中,牛棠棠夏侯彧是一位富有魅力和智慧的人物。佚名通过巧妙的叙述将牛棠棠夏侯彧的冒险故事展现得淋漓尽致。牛棠棠夏侯彧在旅途中遇到了各种各样的挑战与困境,但牛棠棠夏侯彧始终保持着乐观的态度和勇往直前的精神。大当家太阳穴突突地跳,他就随口问一句,这两人,怎么就能牵扯到“死”上面?“我只怕你的东西来历不明,到时候连累我们一帮人,……将给读者带来无尽的欢乐和感动。

    2024年3月18日
    00
  • 结婚选周六还是周日,结婚吉日测算

    请专家帮助看看结婚的日子选在什么时候吉?结婚日子定在周日有问题吗?一般人都定周六……领证日期有什么讲究今天结婚日子好吗?算出来的日子忌嫁娶找人算结婚日子,看了一下万年历,有两天万年历上都写着忌结婚?请专家帮助看看结婚的日子选在什么时候吉?吉祥温馨提示—【根据新人的生肖年精细推荐】庚午月

    2023年10月16日
    00
  • 天蝎座的运势是什么意思啊,天蝎座的星座运势怎么样

    天蝎座的运势天蝎座的运势是怎样的天蝎座运势?天蝎座2023年运势详解?2023天蝎座运势完整版,2023年天蝎座全年运势天蝎座的运势如何天蝎座的运势总运指数:★★★☆☆头脑敏捷能用一种聪明的方式来阐述自己的想法,在艺术上的表现力增强。今日适合:游戏今天玩起游戏来特别来劲,在游戏中还能结识志

    2023年10月4日
    00

发表回复

登录后才能评论
关注微信

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:296358331@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息