gpt4 book ai didi

c - C : client not recieving 中的简单 TCP 客户端服务器模型

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:59 25 4
gpt4 key购买 nike

我正在用 C 语言制作一个简单的 TCP 客户端-服务器,我正在尝试从客户端向服务器发送消息,但我遇到了一些问题。服务器确实发送消息(整数值 > 0)但客户端无法接收它(整数值 > 0)这是代码:客户端

#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdio.h>




int main()
{
int s_id;
char *msg = "hello";
struct sockaddr_in serv_addr;
s_id = socket (AF_INET, SOCK_STREAM, 0);
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons (1156);
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

connect(s_id,(struct sockaddr *) &serv_addr, sizeof (struct sockaddr));
int r = recv (s_id, (char *) msg, 9, 0);
printf("%d \n", r );
printf("%s \n", msg );

return 0;
}

服务器:

#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>

int main()
{
int s_id;
char *msg = "connected";
struct sockaddr_in my_addr, remote_addr;
s_id = socket (PF_INET,SOCK_STREAM,0);
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(1156);
my_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

bind(s_id,(struct sockaddr *) &my_addr, sizeof(struct sockaddr));
listen (s_id,5);
int size = sizeof (struct sockaddr_in);
int new_sd = accept (s_id, (struct sockaddr *) &remote_addr, &size);
int s= send(new_sd, (void *)msg, 9, 0);
printf("%d \n", s );
return 0;
}

我得到的输出(首先启动服务器,然后是客户端)是服务器端:9客户端:-1 你好

我正在使用 Ubuntu 11.04 和 gcc 编译器。

我希望有人能提供帮助。谢谢

乌马尔

最佳答案

char *msg = "hello";

这是一个字符串文字。这是一个常量,您无法更改。

int r = recv (s_id, (char *) msg, 9, 0);

然后你正试图写入它。

将您的声明更改为:

char msg[20];
memset(msg, 0, sizeof(msg));

如果您进行了更改,您的代码将按预期工作。

在 C 中,您将不得不分配和管理缓冲区 - 天下没有免费的午餐:)

另请注意来自 Nikolai N Fetissov 的其他答案- 你真的应该检查所有系统调用的返回码。

关于c - C : client not recieving 中的简单 TCP 客户端服务器模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7366142/

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