我正在尝试为msg分配字符串或int,以便稍后将其发送到服务器。此代码在客户端。
char msg[100];
int a;
.
.
.
bzero (msg, 100);
printf ("[client]your message: ");
fflush (stdout);
read (0, msg, 100);
/* sending message to server */
if (write (sd, msg, 100) <= 0)
{
perror ("[client]Error write() to server.\n");
return errno;
}
我的问题是如何发送变量'a',而不是从命令行写一条消息。
答案 0 :(得分:1)
sprintf(msg, "%d\n", a);
...
write(sd, msg, strlen(msg));
这假设客户端期望一个数字字符串(表示一个整数)后跟一个换行符。我随意选择了换行符分隔符,但你必须有某些约定,服务器通过该约定知道你发送了什么。
答案 1 :(得分:0)
我认为你对程序中发生的事情感到有些困惑。首先,让我们从write()
开始。
write()
功能的签名如下:
ssize_t write(int fd, // a file descriptor
const void *buf, // a void * containing the payload
size_t count // the number of bytes of data to write
);
所以你现在拥有的是:
read (0, msg, 100); // read from stdin a ascii message up to 100 bytes
/* sending message to server */
if (write (sd, msg, 100) <= 0) // write to a file descriptor (sd) the message
// if it works, it should return the number of bytes
// written
据我所知,你所说的是你要发送整数a
而不是char缓冲区msg
。这很容易做到:
int a = 0;
write(sd, &a, sizeof(a)); // send over the file descriptor "sd"
// you need a pointer for the second variable so use the &
// to get the address of a, then you need to identify
// the number of bytes to send, so use the sizeof macro
那将在套接字上发送一个整数。
对于多字节值(例如整数),您可能需要小心使用此方法的字节序问题。从这个角度来看,你可能更好地使用一组字符(在值中移位),这样你就知道在另一端会发生什么。
非常生硬:
int a = rand(); // a random integer (assuming required headers and proper seeding)
char *msg = "Hello"; // a string
write(sd, &a, sizeof(a)); // write the integer
write(sd, msg, strlen(msg)+1); // write a string (strlen + 1 for the null terminator)