我正在使用基于文本的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 }
答案 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和其他人一起阅读。