我正在尝试创建一个套接字,connect方法可以正常工作(即从主函数调用返回0),但是不能正常工作(即从非主函数调用返回非零值),为什么呢?预先感谢
#include<iostream>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>//the new file.
#include<unistd.h>//for using the sleep function.
#include<string.h>
using namespace std;
//char request1[]="GET /index.html HTTP/1.1\r\n\r\n";
void T_occupy(char* request,int n,struct sockaddr_in* server_address,int time_slot){
int my_socket;
while(1){
my_socket=socket(AF_INET,SOCK_STREAM,0);
int connection_status=connect(my_socket,(struct sockaddr*)&server_address,sizeof(server_address));
if(connection_status){
cout<<"error in establising the connection \n";
return;
}
int i;
for(i=0;i<n;i++){
char temp=request[i];
send(my_socket,&temp,sizeof(temp),0);
sleep(time_slot);
}
close(my_socket);
}
}
int main(int argc,char* argv[]){
//first we will do thigns with only one thread.
char* address;
char* msg="GET /Iamabouttoendyourstorybyhackingyouandyouwillnotbeabletoserveanyone.html HTTP/1.1\r\n\r\n";
address=argv[1];
struct sockaddr_in server_address;
server_address.sin_family=AF_INET;
server_address.sin_port=htons(80);
inet_aton(address,(struct in_addr*)&server_address.sin_addr.s_addr);
T_occupy(msg,strlen(msg),&server_address,7);
return 0;
}
答案 0 :(得分:0)
您正在将&server_address
类型为struct sockaddr_in **
的{{1}}传递给connect
,它期望将struct sockaddr_in *
强制转换为struct sockaddr *
。您还将传递sizeof(server_address)
,它是指针的大小,而不是结构的大小。
删除第二个参数中不需要的&
并将*
添加到最后一个参数:
int connection_status=connect(my_socket,(struct sockaddr*)server_address,sizeof(*server_address));