【发布时间】:2011-02-08 06:57:22
【问题描述】:
全部。我对客户端服务器程序有一些奇怪的问题。我有两种不同类型的客户端试图连接到一台服务器,一种只是比另一种更准系统,要做的事情更少。但在其他方面,它们实际上是相同的。虽然准系统代码可以连接到服务器并且服务器可以很好地接受它,但它的复杂版本不能。客户端说它已连接,发送消息(通过 send() 和 sendto())并获取发回的字节数。但是服务器无法识别它。我不太确定为什么,尤其是在比较两个客户端版本时,它们实际上是同一件事(至少在调用 connect() 之前),精细版本具有 bind() 而准系统版本没有。任何人都可以看到为什么这些非常相似的代码不相似的问题:P
if (argc == 3)
{
host = argv[1]; // server address
info.c_name = argv[2];
}
else
{
printf("plz read the manual, kthxbai\n");
exit(1);
}
hp = gethostbyname(host);
if (!hp)
exit(1);
printf("host found\n");
// setting up address and port structure information
bzero((char * ) &server_address, sizeof(server_address));
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_address.sin_port = htons(SERVER_PORT);
// opening up socket
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
exit(1);
else
printf("socket is opened: %i \n", sockfd);
info.sock_fd = sockfd;
// binding socket to a port: not in barebone version
rv = bind(sockfd, (struct sockaddr *) &server_address, sizeof(server_address));
if (rv < 0)
{
printf("MAIN: ERROR bind() %s\n", strerror(errno));
exit(1);
}
else
printf("socket is bound\n");
// connecting
rv = connect(sockfd, (struct sockaddr *) &server_address, sizeof(server_address));
printf("rv = %i\n", rv);
if (rv < 0)
{
printf("MAIN: ERROR connect() %i: %s\n", errno, strerror(errno));
exit(1);
}
else
printf("connected\n");
我什至不确定问题出在哪里,是客户端的复杂版本还是只是服务器?感谢您的任何启发。
【问题讨论】:
标签: c unix tcp connection client-server