白天 TCP 客户端中的连接错误
Connect Error in Daytime TCP Client
我做错了什么,因为我无法获得白天的输出。代码对我来说很好。另外,为什么我们将 inet_pton 中的第三个参数指定为 &serverAddress.sin_addr 而不是 &serverAddress.sin_addr.s_addr ?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <unistd.h>
#define MAXLINE 4096
int main(int argc, char **argv)
{
int sockfd, n;
char receiveLine[MAXLINE +1];
struct sockaddr_in serverAddress;
if(argc != 2)
{
printf("\nUsage: a.out <IPaddress>\n"); //First Argument is FileName, Second should be IP Address
exit(0);
}
if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf("Socket error\n");
exit(0);
}
bzero(&serverAddress, sizeof(serverAddress));
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(4455);
if(inet_pton(AF_INET, argv[1], &serverAddress.sin_addr) <= 0) //Presentation to Network.
{
printf("inet_pton error for %s",argv[1]);
exit(0);
}
if(connect(sockfd, (struct sockaddr*)&serverAddress, sizeof(serverAddress))<0)
{
printf("connect error");
exit(0);
}
while( (n = read(sockfd, receiveLine, MAXLINE)) > 0)
{
receiveLine[n] = 0;
if(fputs(receiveLine, stdout) == EOF)
{
printf("fputs error");
exit(0);
}
}
if(n < 0)
{
printf("read error");
exit(0);
}
exit(0);
}
(代表问题作者发布解决方案).
我傻到忘了监听端口。使用 "nc -l localhost 4455".
我做错了什么,因为我无法获得白天的输出。代码对我来说很好。另外,为什么我们将 inet_pton 中的第三个参数指定为 &serverAddress.sin_addr 而不是 &serverAddress.sin_addr.s_addr ?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <unistd.h>
#define MAXLINE 4096
int main(int argc, char **argv)
{
int sockfd, n;
char receiveLine[MAXLINE +1];
struct sockaddr_in serverAddress;
if(argc != 2)
{
printf("\nUsage: a.out <IPaddress>\n"); //First Argument is FileName, Second should be IP Address
exit(0);
}
if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf("Socket error\n");
exit(0);
}
bzero(&serverAddress, sizeof(serverAddress));
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(4455);
if(inet_pton(AF_INET, argv[1], &serverAddress.sin_addr) <= 0) //Presentation to Network.
{
printf("inet_pton error for %s",argv[1]);
exit(0);
}
if(connect(sockfd, (struct sockaddr*)&serverAddress, sizeof(serverAddress))<0)
{
printf("connect error");
exit(0);
}
while( (n = read(sockfd, receiveLine, MAXLINE)) > 0)
{
receiveLine[n] = 0;
if(fputs(receiveLine, stdout) == EOF)
{
printf("fputs error");
exit(0);
}
}
if(n < 0)
{
printf("read error");
exit(0);
}
exit(0);
}
(代表问题作者发布解决方案).
我傻到忘了监听端口。使用 "nc -l localhost 4455".