C 套接字中的单个字符,一次一个
我正在用C编写一个基于文本的gui的小型telnetish游戏。 我需要从套接字中获取一个字符,而不需要“\n”,这样我就可以控制键 我有点像C 套接字中的单个字符,一次一个,c,sockets,char,C,Sockets,Char,我正在用C编写一个基于文本的gui的小型telnetish游戏。 我需要从套接字中获取一个字符,而不需要“\n”,这样我就可以控制键 我有点像 16 char buffer[256]; 17 bzero(buffer,256); 18 n = read(sock,buffer,255); 但是read()只接受char* recv() 我找到了一种关闭telnet线路模式的方法,但这对我不起作用,或者我不理解 write(s,"\377\375\042\377\373\
16 char buffer[256];
17 bzero(buffer,256);
18 n = read(sock,buffer,255);
但是read()
只接受char*
recv()
我找到了一种关闭telnet线路模式的方法,但这对我不起作用,或者我不理解
write(s,"\377\375\042\377\373\001",6);
根据我在论坛上的发现,可能有一种方法可以通过网络课程实现这一点
最好的方法是什么
我在干什么
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 }
12无效数据处理(int sock)
13 {
14 int n;
15国际一级;
16字符缓冲区;
17 n=recv(插座和缓冲器,1,0);
18如果(n<0)
19 {
20 perror(“从插座读取错误”);
21出口(1);
22 }
23 printf(“消息:%c\n”,缓冲区);
24 n=写入(sock,“MSG SENT\n”,18);
25 }
read()
只接受char*
char*
和char[]
在C中基本上是等价的,当然是为了这个目的。很明显你甚至都没试过
recv()
否,recv()
与套接字的read()
相同,除非第四个参数非零,并且不需要传递\n
即可获得它
我找到了一种关闭telnet线路模式的方法,但这对我不起作用,或者我不理解
write(s,"\377\375\042\377\373\001",6);
这是IAC DO LINEMODE
(255 253 36),客户端根本不应该发送它,然后是IAC将回显(255 251 1)。正确的命令是IAC WILL LINEMODE
(255 251 36)或“\377\373\042”,并且会有一个应答IAC DO LINEMODE(255 253 36或“\377\375\042”
),即IAC DO LINEMODE
,其中服务器允许您开始协商LINEMODE。我建议您研究更多细节,它相当复杂,需要与和其他人一起阅读。如果您输入完整的代码,将更容易回答。如果您一次只想读取/recv 1个字符,为什么您要255个字符?就像我可以使用read()做的示例一样。它总是在读取缓冲区,即使我将它设置为1个字符,然后我就可以处理它了。对等方的行缓冲肯定是造成通信阻塞到行的原因。阅读RFC:嗯,我使用了netcat和netcat-t,同样的结果,不管怎样,进入阅读。对不起,你是对的,它们是一样的。然而,我的意思是,在我按下回车键之前,数据不会被发送。客户端:消息服务器:MSG:m与网络无关。。这与您如何捕获要发送到网络的数据有关。我知道。我要指出的是,我需要的是类似于while(c=getchar())方法的东西。你使用的代码没有问题。我会坚持关闭线路模式。