Java';s readInt()在C中的等价物?
一方面,我有一个Java客户机将INT写入其outputstream:Java';s readInt()在C中的等价物?,java,c,linux,sockets,inputstream,Java,C,Linux,Sockets,Inputstream,一方面,我有一个Java客户机将INT写入其outputstream: int a = 20; dataout.writeInt(a); dataout.flush(); 另一方面,我有一台C服务器在监听连接: int client = accept(...); 如何读取Java发送的int 如果我有一台Java服务器,我可以很容易地编写: int a = dataIn.readInt(); 如何在C中实现这一点 谢谢将其读入字符缓冲区并使用atoi()将字符串转换为int。将其读入字符缓
int a = 20;
dataout.writeInt(a);
dataout.flush();
另一方面,我有一台C服务器在监听连接:
int client = accept(...);
如何读取Java发送的int
如果我有一台Java服务器,我可以很容易地编写:
int a = dataIn.readInt();
如何在C中实现这一点
谢谢将其读入字符缓冲区并使用
atoi()
将字符串转换为int。将其读入字符缓冲区并使用atoi()
将字符串转换为int。您可以使用Read函数,但必须小心使用sizeof(int)您可以使用read函数,但必须小心使用套接字中的sizeof(int)字符,然后您必须担心endianess。如果您不介意以纯文本发送:
fscanf(dataIn, "%d", &a);
纯文本规则:-)
请确保在刷新之前从源文件发送一个“\n”(或不是数字的内容)。
fscanf
如果您不介意以纯文本形式发送:
fscanf(dataIn, "%d", &a);
纯文本规则:-)
请确保在刷新之前从源发送一个“\n”(或不是数字的内容)。将取决于服务器的端号。将取决于服务器的端号。假设整数为4字节,这是您的意思吗?char-buf[4];读取(客户,buf,4);int integer=atoi(buf);不完全是这样-如果Java服务器将Int作为四个字节发送,那么整个事情将变得更加复杂,因为您基本上需要知道Int是以什么字节顺序发送的。我会尝试将Int作为字符串发送,使用更大的缓冲区(最多16个字节)来存储字符串,然后按照您的建议使用atoi。如果您以字节表示形式发送Int,我会在发送之前将其转换为网络字节顺序,并在收到后将其转换回主机顺序,否则您将陷入一个非常奇怪的错误世界。atoi没有错误处理,atoi(“0”)==atoi(“blah”);最好使用strolassuming将整数表示为4字节,这就是您的意思吗?char-buf[4];读取(客户,buf,4);int integer=atoi(buf);不完全是这样-如果Java服务器将Int作为四个字节发送,那么整个事情将变得更加复杂,因为您基本上需要知道Int是以什么字节顺序发送的。我会尝试将Int作为字符串发送,使用更大的缓冲区(最多16个字节)来存储字符串,然后按照您的建议使用atoi。如果您以字节表示形式发送Int,我会在发送之前将其转换为网络字节顺序,并在收到后将其转换回主机顺序,否则您将陷入一个非常奇怪的错误世界。atoi没有错误处理,atoi(“0”)==atoi(“blah”);你最好用strtol