套接字中的单个字符,一次一个

时间:2014-10-26 01:36:27

标签: c sockets char

我正在使用基于文本的gui在C中进行小型telnetish游戏。 我需要从没有' \ n'的套接字中获取一个字符。我需要这样才能控制钥匙。

我有类似

的东西
16     char buffer[256];
17     bzero(buffer,256);
18     n = read(sock,buffer,255);

read()仅接受char *

recv()更好,但您仍然需要通过' \ n'得到它。

我找到了一种关闭telnet线路模式的方法,但这对我不起作用,和/或我不理解它。

write(s,"\377\375\042\377\373\001",6);

根据我在论坛上发现的内容,可能有办法用ncurses来做。

最好的方法是什么?

我在

 12 void doprocessing (int sock)
 13 {   
 14     int n;
 15     int i;
 16     char buffer;
 17     n = recv(sock,&buffer,1,0);
 18     if (n < 0)
 19     {   
 20         perror("ERROR reading from socket");
 21         exit(1);
 22     }
 23     printf("MSG: %c\n",buffer);
 24     n = write(sock,"MSG SENT\n",18);
 25 }

1 个答案:

答案 0 :(得分:1)

  

read()仅接受char *.

char *char[]在C中大部分是等效的,当然是为此目的。显然你甚至没有尝试过。

  

recv()更好,但您仍然需要通过&#39; \ n&#39;得到它。

不,recv()与套接字的read()相同,除非第四个参数不为零,并且您不需要通过\n来获取它。

  

我找到了一种关闭telnet线路模式的方法,但这对我不起作用,和/或我不理解它。

write(s,"\377\375\042\377\373\001",6);

这是IAC DO LINEMODE(255 253 36),客户端根本不应该发送,然后是IAC WILL ECHO(255 251 1)。正确的命令是IAC WILL LINEMODE(255 251 36)或&#34; \ 377 \ 373 \ 042&#34;,并且会有一个回复IAC DO LINEMODE(255 253 36或"\377\375\042")是IAC DO LINEMODE,服务器允许您开始协商linemode。我建议您学习RFC1116以获取更多详细信息,它相当复杂,需要与RFC854和其他人一起阅读。