C++ INET noob,我做错了什么?
问题描述:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <cstdio>
using namespace std;
int main(int argc, char *argv[])
{
int port, n,sockfd;
struct sockaddr_in srv_addr;
struct hostent *serv;
char buffer[256];
if(argc<3)
{
cout <<"\n ussage: host port\nexiting\n";
return 0;
}
port=atoi(argv[2]);
sockfd=socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
cout <<"\nsocket creation on"<<port<<" failed\nexiting\ncheck to see if port is in use";
return 0;
}
serv = gethostbyname(argv[1]);
if (serv=NULL)
{
cout <<"\n"<<serv<<" is not a valid host name\nexiting";
return 0;
}
bzero((char *) &srv_addr, sizeof(srv_addr));
srv_addr.sin_family=AF_INET;
bcopy((char *) serv->h_addr,
(char *) &srv_addr.sin_addr.s_addr,
serv->h_length);
srv_addr.sin_port=htons(port);
if (connect(sockfd,&srv_addr,
sizeof (srv_addr))<0)
{
cout <<" \nconnection failed\n";
}
cout <<"\nType message\n";
bzero(buffer, 256);
cin.getline(buffer,256);
n=write(sockfd,buffer,strlen(buffer));
if (n>0)
{
cout <<"\nsocket write error\nexiting\n";
}
n=read(sockfd,buffer,255);
if (n>0)
{
cout <<"\nsocket read error\nexiting\n";
}
cout <<buffer;
return 0;
}
在编译时,我得到这个错误:C++ INET noob,我做错了什么?
fg.c: In function ‘int main(int, char**)’:
fg.c:53:33: error: cannot convert ‘sockaddr_in*’ to ‘const sockaddr*’ for argument ‘2’ to ‘int connect(int, const sockaddr*, socklen_t)’
我不能弄明白。我是编程的一个小菜鸟。任何帮助都很感激。
答
您需要显式投射。更换
connect(sockfd,&srv_addr, sizeof (srv_addr))
与
connect(sockfd,(sockaddr*)&srv_addr, sizeof (srv_addr))
+0
是否需要声明sockaddr,或者这是我已经以不同的名称声明的东西。 – TaroKhan 2012-03-23 17:50:38
+1
您继续将'srv_addr'变量声明为'sockaddr_in',但您在调用connect()时将其类型转换为'sockaddr',就像arrowdodger显示的那样。 'sockaddr'在与'sockaddr_in'相同的头文件中声明。 – 2012-03-24 00:39:41
你能正确取悦格式/缩进你的代码?这将使你更容易遵循你所写的内容。 – Bart 2012-03-23 16:56:53
我以为我做到了。多数民众赞成在多大程度上......或者说我是这样。在我十几岁的时候用它来编写简单的小C++代码。 – TaroKhan 2012-03-23 17:55:17
谢谢Arrowdodger。我意识到这是指我的结构,因为我问你第二个问题。 – TaroKhan 2012-03-23 17:56:58