当内存分配或管理出现错误时,通常会出现分段错误。但在这种情况下,我不确定什么是错的。任何建议都会有帮助。我正在尝试连接到select()
服务器。
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<netdb.h>
#define INPUT "Socket TCP"
#define BUF_SIZE 1024
int main(int argc, char *argv[]){
int sockt;
struct sockaddr_in serv;
struct hostent *host;
char buff[BUF_SIZE];
serv.sin_family = AF_INET;
/*host = argv[1];
host = malloc (1 + strlen (argv[1]));
*/
host = gethostbyname (argv[1]);
printf("1");
if(host == 0)
{
perror("gethostbyname failed");
close(sockt);
exit(1);
}
else
printf("gethost name succeeded \n");
sockt = socket(AF_INET, SOCK_STREAM, 0);
printf("2");
if(sockt < 0)
{
perror("socket failed");
exit(1);
}
else
printf("socket connected \n");
printf("3");
memcpy(&serv.sin_addr, host->h_addr, host->h_length);
serv.sin_port = htons(1234); /*Convert from host byte order to network byte order*/
printf("4");
/*Condition to check if the client has connected*/
if(connect(sockt, (struct sockaddr *) &serv, sizeof(serv)) <0)
{
perror("Failed to connect");
close(sockt);
exit(1);
}
else
printf("5");
/*Condition to check if the data is sent*/
if(send(sockt, INPUT, sizeof(INPUT), 0) < 0)
{
perror("Failed to send the data");
close(sockt);
exit(1);
}
else
printf("data sent");
printf("The data sent is %s\n", INPUT);
close(sockt);
return 0;
}
答案 0 :(得分:1)
如WhozCraig所述,问题是您没有提供主机名或IP地址。 你们都没有检查提供的参数数量!
我运行你的程序并没有发现任何带有正确参数的段错误,即提供了host_name。
您应该包括以下检查:
if(argc<2)
{
printf("usage : %s hostname",argv[0]);
exit(0);
}
如果没有提供主机名,则不允许程序继续。
以./<excecutable> <host_name>
首先尝试使用localhost。
即。 ./tcp_client localhost
希望这有帮助!