gpt4 book ai didi

c - TCP 客户端中的段错误 : 11,

转载 作者:太空狗 更新时间:2023-10-29 12:31:22 28 4
gpt4 key购买 nike

当内存分配或管理出现错误时,通常会出现段错误。但在这种情况下,我不确定出了什么问题。任何建议都会有所帮助。我正在尝试连接到 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;
}

最佳答案

作为WhozCraig提到,问题是你没有提供主机名或IP地址。您也没有检查提供的参数数量!

我运行了您的程序,但没有发现任何具有正确参数(即提供的主机名)的段错误。

您应该包括以下检查:

if(argc<2)
{
printf("usage : %s hostname",argv[0]);
exit(0);
}

如果没有提供主机名,这将不允许程序继续。

./<excecutable> <host_name> 运行程序

首先尝试使用本地主机。

./tcp_client localhost

希望这对您有所帮助!

关于c - TCP 客户端中的段错误 : 11,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26071203/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com