我希望使用 Photon Fusion 制作一款在线多人棋盘游戏。基本的游戏玩法包括人们点击商店按钮购买东西,然后点击下一个回合按钮将回合传递给下一个玩家。我还想只向当前轮到的人显示某些文本框。
然而,我真的很难找到一个关于如何完成这项工作的教程。抱歉,如果这是一个愚蠢的问题,任何指点将不胜感激。网络是我的弱点之一。
我曾尝试对此进行研究(Photon 文档、Youtube、reddit 等),但我发现的几乎所有内容都使用 Photon 的预测运动和用于 fps 或跑酷游戏的键盘按钮。
作为网络方面的新手,我正在努力弄清楚如何制作一个场景,该场景在每个回合中使用由不同人控制的按钮,并为每个人移动游戏对象。
我在比较C中的字符串时遇到了麻烦(我很擅长).我在此服务器应用程序上有套接字等待接受来自客户端的数据.在我的程序的这个特定部分,我希望能够根据从客户端收到的数据执行MySQL查询.我希望能够知道接收到的数据何时具有"newuser"的值以启动简单的注册过程.Strcmp返回正值1,我相信我应该得到0,因为值应该相等.
源代码:
//setup socket
//loop and select structure to handle multiple connections
if ((nbytes = recv(i, buf, sizeof buf, 0)) <= 0) {
// got error or connection closed by client
if (nbytes == 0) {
// connection closed
printf("selectserver: socket %d hung up\n", i);
} else {
perror("recv");
}
close(i); // bye!
FD_CLR(i, &master); // remove from master set
} else {
char check[] = "newuser";
char fromUser[sizeof check];
strncpy(fromUser,buf, sizeof check);
printf("length of fromUser: %d\n", sizeof fromUser);
printf("length …Run Code Online (Sandbox Code Playgroud) 我有这段简单的代码写入套接字,然后从服务器读取响应.服务器速度非常快(每次响应5ms).但是,尽管写入套接字很快 - 读取套接字的响应总是慢得多.有线索吗?
module UriTester
module UriInfo
class << self
def send_receive(socket, xml)
# socket = TCPSocket.open("service.server.com","2316")
begin
start = Time.now
socket.print(xml) # Send request
puts "just printed the xml into socket #{Time.now - start}"
rescue Errno::ECONNRESET
puts "looks like there is an issue!!!"
socket = TCPSocket.open("service.server.com","2316")
socket.print(xml) # Send request
end
response=""
while (line =socket.recv(1024))
response += line
break unless line.grep(/<\/bcap>/).empty?
end
puts "SEND_RECEIVE COMPLETED. IN #{Time.now - start}"
# socket.close
response
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
谢谢!
我有一个简单的套接字服务器,等待消息并响应.我该怎么测试呢?是否有客户端应用程序或某些东西可以帮助我将特定端口上的一些数据发送到服务器,并查看输出?远程登录?
有一种情况是应用程序告诉网络上的设备从网络路由器的DHCP服务器获取其IP地址.如果DHCP服务器不可用,则设备的行为会变得不稳定.有没有一种方法可以在程序上检测网络路由器是否支持DHCP?或者,这是设备在尝试从DHCP服务器获取其IP地址时需要做的事情吗?
我在使用C++程序中的标准BSD样式套接字时遇到了严重问题.在下面的代码中,我连接到本地Web服务器,发送请求,并简单地创建一个等待数据返回的循环.我实际上确实收到了数据,但随后我得到了无穷无尽的0长度数据流,好像它是一个非阻塞套接字.Web服务器可能没有杀死连接,因为如果是这样的话,我会收到-1的长度.
请忽略我在下面做的简单错别字,因为我正在从内存中编写代码,而不是直接复制/粘贴.该代码在OSX和Windows上产生相同的结果.
int sock = socket(AF_INET, SOCK_STREAM, 0);
//assume serv_addr has been created correctly
connect(sock, (sockaddr*)&serv_addr, sizeof(serv_addr)) < 0);
std::string header = "GET / HTTP/1.1\r\n"
"Host: 127.0.0.1:80\r\n"
"Keep-Alive: 300\r\n"
"Connection: keep-alive\r\n\r\n";
send(sock, header.c_str(), header.length()+1, 0);
for (;;) {
char buffer[1024];
int len = recv(sock, buffer, 1024, 0);
cout << len << endl;
//this outputs two numbers around 200 and 500,
//which are the header and html, and then it
//outputs and endless stream of 0's
}
Run Code Online (Sandbox Code Playgroud) 我用这段代码从socket读取:
int n ;
char buffer[256];
n = read(newsockfd, buffer, 255);
if (n < 0)
{
error("ERROR reading from socket");
}
Run Code Online (Sandbox Code Playgroud)
如果必须读取的数据大于255字节(例如1000)必须发生哪些更改?
我知道改变char buffer[1000],我需要不同的解决方案.
你有N台计算机,[Ca,Cb]表示a连接到b,这种连接是对称和传递的.问题是编写一个程序,检查所有计算机是否相互连接并相互通信.
时间有效的算法是优选的.
我正在尝试将10台计算机连接在一起,我想编写的程序将有一台"控制"计算机.从我看到的这台计算机将采取通过网络发送的所有数据包并与他们回应...对吗?其他计算机需要能够发送信息(然后回显给其他人)到'控制'......有一个简单!或简单的方法来做到这一点?从我看到的我想要一个非阻塞套接字?
我已经研究过套接字等,但对于像我这样的业余程序员来说,这似乎是一项艰巨的任务:)
我很善于寻找具有send()事件和事件驱动力的简单类意蕴recv().
我不会通过网络发送那么多信息.
所以我有一个我无法弄清楚的问题.我正在用C编写一些代码.我一直在处理从网络读取似乎随机工作的问题.
我最终将其追溯到代码中的字符串数量.我不敢相信,但我已经深入验证了它.
代码库相当庞大,所以我不确定字符串奇偶校验的总数.但是我知道,如果我添加一个奇数,那么程序可以工作,如果我添加一个偶数,它不会.
只是为了澄清当我说它不起作用时,它仍然构建并执行,但每次我尝试通过网络读取任何东西我得到的都是0.当它工作时,我得到正确的数据.
有没有人听说过这样的事情?或者知道可能导致这种情况的原因是什么?我可以看到程序的数据部分是否变得太大并且开始阻碍其他代码的空间,但事实上它的奇怪/偶数事情让我感到困惑.
谢谢
编辑(添加更多信息):
该平台是一个定制设计的设备.代码库是redboot,但是对于自定义设备已经显着改变了.
以剪切为例:
//这将起作用,因为它是奇数个字符串.
char* str1 = "test";
char* str2 = "test2";
char* str3 = "test3";
int i = strlen(str1) + strlen(str2) + strlen(str3);
Run Code Online (Sandbox Code Playgroud)
......................................
如果我要改变最后一行
int i = strlen(str1) + str(len2);
Run Code Online (Sandbox Code Playgroud)
这样str3就会被编译器优化掉,然后代码将不再起作用.我用各种长度的字符串测试了这么多次都导致了相同的奇/偶行为.(我只是发送到一个调试日志,以便它没有被优化出来.没有任何花哨的事情).
Edit2:上面的代码可以放在代码库中的任何地方,它会导致同样的问题.它是否被执行无关紧要,这让我相信它不是堆栈溢出.
c ×5
sockets ×4
c++ ×3
networking ×2
string ×2
tcp ×2
algorithm ×1
connection ×1
dhcp ×1
optimization ×1
photon ×1
strcmp ×1
webserver ×1