【发布时间】:2011-11-14 00:48:52
【问题描述】:
我在 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 编译器。
我希望有人可以提供帮助。 谢谢
奥马尔
【问题讨论】:
-
recv是永远阻塞还是返回?如果是后者,请检查 errno,方法是执行if (int r = recv (s_id, (char *) msg, 9, 0) < 0) {perror("recv");}之类的操作 -
在编写新的网络代码时,请尽可能使用 getaddrinfo。