- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在用 C 语言编写 IRC 客户端。并在连接服务器时遇到了一些问题。当我运行程序时,我得到以下信息:
输出
Set Fully Qualified host Domain Name(human readable): ::automaticaly provided::
Set the port number of the server You want to connect to: ::automaticaly provided::
Destination server IP: 88.190.23.245
Socket descriptor: 3
Connection has been successfully established
Peer's IP is: 88.190.23.245
Peer's port is: 5190
:irc2.gbatemp.net NOTICE AUTH :*** Looking up your hostname...
:irc2.gbatemp.net NOTICE AUTH :*** Found your hostname (cached)
Type Your nick name: ::automaticaly provided::
Type Your user name: ::automaticaly provided::
(10-20 seconds break here and than what follows down here)
ERROR :Closing Link: thisIsMyNickNameXXXa[85.221.165.54] (Ping timeout)
temp.net NOTICE AUTH :*** Found your hostname (cached)
ERROR :Closing Link: thisIsMyNickNameXXXa[85.221.165.54] (Ping timeout)
temp.net NOTICE AUTH :*** Found your hostname (cached)
ERROR :Closing Link: thisIsMyNickNameXXXa[85.221.165.54] (Ping timeout)
temp.net NOTICE AUTH :*** Found your hostname (cached)
.......
.............
...................
============================================= ==============
::automaticaly provided::
- 表示它暂时由程序传递,所以我不必多次输入它。
顺便说一句。正在连接到 irc.gbatemp.net:5190(就我而言,不需要密码)
在提供必要的数据 10-20 秒后发生中断(我在 OUTPUT 部分中指定)并且 ERROR temp.net 部分紧随其后(我用点标记)
所以问题的主要部分是我应该如何以及何时发送 PONG 消息以响应 PING?我做了我的研究,但仍然无法做到。为什么我在 STDOUT 中看不到 PING 消息?
我正在提供负责输出的代码和下面的 PINGPONG 部分(已注释)(目前的主要问题是 PING PONG,因为错误状态为 PING TIMEOUT)可能 while(1) 循环还不完美,但我想它是另一个主题的主题)代码如下:
int readReady=0;
int writeReady=0;
pid_t pID;
char buf[1024]; //I/O buffer (?)
pid_t sID;
char *NICK = "NICK thisIsMyNickNameXXXa\n\r";
char *USER = "USER tomaazrxtc 8 * :nameandsurname";
char ping[512];
char *change;
pID=fork();
if(pID < 0){
//failed to execute fork()
perror("Error while forking");
getchar();getchar();
exit(1);
}
if(pID > 0){
exit(0);
}
//child down here
//setting new session
sID = setsid();
if(sID < 0){
perror("Error while setting new session");
getchar();getchar();
exit(1);
}
//---------receiving NOTICE AUTH :*** part-------------------------------
if(recv(sockfd, buf, 1024,0)>0){
printf(buf);
}
else{
perror("Error while receiving data");
}
//---------providing and sending NICK and USERNAME-----------------------
printf("Type Your nick name: \n");
//scanf(nickname); pamietaj zeby zapewnic podawanie tylko nicku, a format handler zrobic osobno
send(sockfd, NICK, strlen(NICK), 0);
printf("Type Your user name: \n");
//scanf(username); pamietaj zeby zapewnic podawanie tylko nicku, a format handler zrobic osobno
send(sockfd, USER, strlen(USER), 0);
//--------Shoudnt I receive PING message just here ?????-----------------
recv(sockfd, buf, strlen(buf), 0);
printf(buf);
//--------PONG'ing function which I havent tested yet since i cant see PING message----
recv(sockfd, ping, 512,0);
if(strstr(ping, "PING")){
change = strstr(ping, "PING");
strncpy(change, "PONG", 4);
send(sockfd, ping, 512, 0);
}
//-------------------------------------------------------------------------
while(1){
//sleep(1);
if((readReady = readReadiness(sockfd))==0){ //nothing to recv
if((writeReady = writeReadiness(sockfd))>0){ //sending is possible
scanf(buf);
send(sockfd, buf, strlen(buf), 0);
continue;
}
else
continue; //if there s no data to read and cant send (is it even possible?)
}
else{ //if there s some data to recv() on the socket buffer
recv(sockfd, buf, strlen(buf), 0);
printf(buf);
continue;
}
}
//--------------------------------------------------------------------------
好的。以后我会把问题留给其他人,并提供答案。这是微不足道的。
我只是在 USER 变量的末尾添加了\n\r (就像在 NICK 字符串中一样)。像魅力一样连接!!
最后:))
最佳答案
因此,我立即发现的几个问题是:
NICK
未正确终止。它应该是 \r\n
。USER
根本没有终止,它应该以 \r\n
结束。512
。 send()
不适用于字符串,它适用于原始数据。所以,你也会在这里传递很多垃圾。您需要根据收到的内容传递长度。printf(buf);
不安全。任何恰好包含格式说明符的传入字符串都会导致 printf()
尝试解释它们(这称为“格式字符串漏洞”)。它们应该替换为 printf("%s", buf);
以安全的方式实现相同的行为。recv()
的返回值来了解您收到了多少数据。strlen()
来确定缓冲区的大小。此函数计算字符串的长度,而不是缓冲区的大小。您应该改用 sizeof
运算符。scanf(buf);
应该做什么,但几乎可以肯定这不是您想要的。也许您正在寻找 fgets()
?recv()
调用发生在 buf
调用之后。你怎么知道什么时候会发生,会持续多长时间?似乎您应该始终使用相同的缓冲区。关于c - C语言如何连接IRC服务器/解析IRC MSGs/PING-PONG处理(提供代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10482249/
我使用 Xcode 和 swift 5 构建了一个应用程序。 每次我点击“简单”、“中等”、“困难”或“2 人”按钮时,我都会收到错误消息: Could not cast value of type
所以我和我的搭档正在尝试制作一个玩家对电脑的乒乓球游戏,但我们就是不知道如何让电脑输。 我们已经完成了基本的工作,它运行良好,但计算机永远不会丢失。我们还尝试使用 sleep 来减慢计算机的速度,但是
我应该如何设计“适当的” OO Pong? 正确的想法是可以更改任何元素:球,球场和 Racket 的形状,增加了障碍,甚至是“助力”,例如“可以将球粘在 Racket 上”。 目前,还有两个紧迫的问
我正在尝试用 Java 制作 Pong 游戏,但在球从 Racket 上弹起时遇到了一些问题。 我有两个桨:左桨1,右桨2。 我的想法如下:ball_Y应该在 Racket 的高度之间,ball_X触
我对 Java 还很陌生,需要一些帮助。我已经创建了 Pong 游戏(使用 Eclipse),并且在大多数情况下,它运行得很好。然而,碰撞检测有些不对劲。球从人类控制的 Racket 上反弹得很好,但
我正在打乒乓球,我已经将球的 x 坐标设置为在它碰到 Racket 时立即反转,并在它没有击中 Racket 时停止。此代码在“大部分”时间都有效,但“有时”球会在没有明显原因的情况下一击中 Rack
我正在创建一个 JS Pong 游戏,但 Pong 游戏中的球在几秒钟后开始滞后。我尝试停止动画帧,优化代码以获得更好的性能并重写球的代码,但没有任何效果。有人可以帮我吗? HTML(无 CSS)
我很困惑为什么我的记分板没有在屏幕上更新。分数正在增加(我用调试器检查过,球也正在居中)。但记分牌根本不更新,它不断显示“0:0” 乒乓球类 package com.dheraxysgames.pon
最近我编写了一个pygame 'Pong',我还没有完成它,因为桨还不能移动。 但是,我在这里遇到了一个问题。因为我想要得到的分数等于球击中 window 边缘的次数。对于我的程序,当球撞到墙壁时,得
嗨,我写了这个简单的碰撞检测和弹跳算法,但是碰撞检测到 y 就好像它是 x 轴一样 bool Ball::DetectCollision(Paddle p) { if(GetPosition().y
我正在用 Python 制作经典的 Pong,但我需要帮助。 对于/在这个游戏中,我想计算球的轨迹,因此对于给定的开始点(在左桨上弹跳)和角度(绿色物体),我想计算终点(蓝色 X)。这一切都是为了将
我有一个 UIImageView,其中加载了一个 png 图像序列。 我的问题是 - 你知道有什么方法可以“乒乓”动画序列吗?这样就从 1-24 向前播放,然后从 24-1 向后播放并循环。 (技术上
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我正在用java制作乒乓球,但敌人的AI没有动。它应该向球移动的方向移动。请问有人可以帮助我吗? 主类: import javax.swing.*; public class Main extends
我正在用java制作一个乒乓球类型的游戏,我试图让球从墙上弹开,但每当球撞到球时,它就会停止,它不会从墙上反射出来,我看不到找出原因。 处理球运动的球类 public class Ball { pri
我正在为我的 Pong 克隆编写一些困难,我写这些是为了熟悉 SFML 和 Xcode。对于最难的难度,我想创建一个人工智能关卡,让计算机立即知道球会去哪里。所以,如果我有 xVelocity 和 y
我是 HTML 5 + Canvas 游戏开发新手。试图在我的 Pong 游戏中为球制作动画。这是我的 code .相关片段: 增加球的速度: Ball.prototype.update = func
好吧,我为此搜索了很多,但我能找到的只是人们说的像 pi * direction,方向是我假设的球进入的角度。但我的问题是,我不知道我是如何得到球进入的角度的,所以我做不到这些。如果有人可以解释我将如
试图在 java 中制作乒乓球但不能同时移动两个 Racket 。您可以移动其中一个,但不能同时移动两者。我是否需要创建具有 2 个不同面板的 2 个线程? 这里是我指定关键事件的地方 public
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我是一名优秀的程序员,十分优秀!