gpt4 book ai didi

C TCP Server 关闭前不发送数据

转载 作者:可可西里 更新时间:2023-11-01 02:57:59 32 4
gpt4 key购买 nike

我正在尝试在两台 Ubuntu 计算机之间建立 TCP 连接。服务器应该向客户端发送单个字符值。客户端应该打印这些字符。在服务器和客户端之间建立连接似乎按预期工作,但是当我调用 send() 时,客户端没有输出。

实现输出的唯一方法是在无限循环中发送相同的字符值,这会导致在客户端控制台打印无限数量的字符,或者通过更改客户端代码中的 if 语句(请参阅下面的代码)从 if(len > 0) 到 if(len >= 0)。在这种情况下,一旦我通过 CTRL + C 关闭服务器,发送的字符将被正确打印,但它也会多次打印最后传输的字符。因此,当服务器仍在运行时,我无法在客户端接收值。

这是服务器的代码:

int serverSocket = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in adresse;
adresse.sin_family = AF_INET;
adresse.sin_addr.s_addr = INADDR_ANY;
adresse.sin_port = htons (2457);

bind ( serverSocket, (struct sockaddr *) &adresse, sizeof (adresse))
listen (serverSocket, 1);

while(1)
{
socklen_t adrlen = sizeof(struct sockaddr_in);
int conSocket= accept ( serverSocket, (struct sockaddr *) &adresse, &adrlen );
if(conSocket => 0)
{
char charToSend;
while(1)
{
charToSend = returnChar();
if(send(conSocket= , &charToSend, 1, 0) == -1)
{
printf("Error\n");
}
}
close(conSocket);
}
close(serverSocket);
}

这是客户的代码:

int clientSocket = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in adresse;
adresse.sin_family = AF_INET;
adresse.sin_port = htons (2457);
inet_aton ("192.168.2.101", &adresse.sin_addr);

if (connect ( clientSocket, (struct sockaddr *) &adresse, sizeof (adresse)) == 0)
{
while(1)
{
char recvd[2];
int len = recv(clientSocket, recvd, 1, 0);
recvd[1] = '\0';
if(len > 0)
{
printf("%s", recvd);
}
}
}

服务器代码中的函数 returnChar() 用于处理来自传感器的信息并返回一个 char 值。在处理完一个完整的信号并同时运行一个循环之前,它不会终止。

我唯一的想法是 send() “没有时间”在程序继续另一个循环之前发送值。这可能是问题所在吗?还是我在客户的代码中做错了什么?

最佳答案

我认为问题出在客户端。您打印没有行终止的字符。因此,所有内容都缓冲在客户端标准输出流中。请将 '\n' 添加到 printf 中:printf("%s\n", recvd);

关于C TCP Server 关闭前不发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35201254/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com