1
最近我读一些基本的关于用C Socket编程,并以实践这个基本知识,我试着写一个PROGRAMM,刚刚应该做用户和IRC服务器,之间的对话的一点点。IRC通信详细
下面是相关代码:
初始化通信插座:
void init(char *s[])
{
struct sockaddr_in server;
printf("%s : connect . . .\n",s[0]);
server.sin_family = AF_INET;
inet_pton(AF_INET,s[1],&server.sin_addr.s_addr);
server.sin_port = htons(atoi(s[2]));
if((sock = socket(AF_INET,SOCK_STREAM,0))!= 0)
printf("%s : socket succesfully initialized.\n",s[0]);
if(connect(sock,(struct sockaddr *)&server,sizeof(server))==0)
printf("%s : succesfully connected.\n",s[0]);
}
发送消息:
void putmessage(char *s)
{
write(sock,s,sizeof(s));
}
/*--------*/
(...)
do
{
scanf("%s",input);
putmessage(strcat(input,"\r\n"));
}while(strcmp(input,"quit"));
(...)
接收Messagges:
char *getmessage(void)
{
int i,t = 0;
char *p1,*p2;
p1 = malloc(sizeof(*p1));
*p1 = '\0';
p2 = malloc(sizeof(*p2));
*p2 = '\0';
do
{
i = read(sock,buf,BUFSIZE-1);
buf[i] = '\0';
t += i+1;
p2 = malloc(t);
strcpy(p2,p1);
strcat(p2,buf);
free(p1);
p1 = p2;
}while(i == BUFSIZE-1);
return p1;
}
我在分流过程中使用一个用于接收和一个用于发送的过程中,它只是无限地调用。 通信工程基本上,因为邮件我从不同的IRC服务器我试图获得(irc.quakenet.org,irc.debain.org/COM)总是errormessages与我发送的消息,说我想念参数。
现在的问题是:为什么可以通过Telnet客户端连接到这些IRC网络正常,但不能使用相同的消息(PASS,NICK,USER)我自己的代码。什么东西对我来说很重要,比如编码(gcc通常使用哪种编码?)?
的PROGRAMM的Ubuntu 12.04下运行。如果您需要更多信息,请询问。
当然,向你报告的“缺失参数”错误应该告诉你你错过了什么?否则是指IRC协议,它应该告诉你如何构建消息...... – Nim
我阅读了两个相关的RFC,而且我的消息与我自己的代码以及用于测试的telnet客户端完全相同。在telnet客户端上,它的工作原理和我自己的代码都没有,因此我没有得出结论:问题是连接,而不是所使用的消息的形式 – user1694911