c语言中void msg,如何连接到IRC服务器/解析C语言(提供代码)的IRC MSG/PING-PONG处理...

正在用C语言编写IRC客户端。并在连接到serwer时遇到了一些问题。 我碰到下面当我运行程序:如何连接到IRC服务器/解析C语言(提供代码)的IRC MSG/PING-PONG处理

输出

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:: - 表示由程序传递给现在,所以我不必输入很多次。

btw。我连接到irc.gbatemp.net:5190(无需密码,只要我担心)

在提供必要的数据10-20秒后发生中断(我在OUTPUT部分中指定)并且ERROR temp.net部分如下广告infinitum(我用点划线)

所以问题的主要部分是我应该如何以及何时发送PONG消息来响应PING?我做了我的研究,但仍然无法做到。为什么不能在STDOUT中看到PING消息? (1)循环还不完美,但我认为它是s(012)(012)(012)(012)代码为另一个主题)代码波纹管:

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字符串中一样)。 连接就像一个魅力!

在最后:))

2012-05-07

azrahel

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值