私は単純なクライアント/サーバプログラムを作ろうとしていますが、クライアント上では必ずSegmentationフォールトを取得します。私はIPアドレス、ポート、多くの代替ソリューションを試してみましたが、私にとってはうまくいきませんでした。ソケットクライアントがKaliで動作しない
サーバコード:
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
int main(int argc, char const *argv[])
{
int sock,mysock;
struct sockaddr_in server;
char buff[1024];
char s[256];
if (!gethostname(s, sizeof s))
{
printf ("Machine: %s\n", s);
{
struct hostent *host= gethostbyname(s);
if (host != NULL)
{
struct in_addr **adr;
for (adr = (struct in_addr **)host->h_addr_list; *adr; adr++)
{
printf("IP : %s\n", inet_ntoa(**adr));
}
}
}
}
/*creation du socket*/
sock=socket(AF_INET,SOCK_STREAM,0);
if (sock<0)
{
perror("creation de socket echouer\n");
exit(1);
}
server.sin_family=AF_INET;
server.sin_addr.s_addr=INADDR_ANY;
server.sin_port=5000;
if (bind(sock, (struct sockaddr *) &server,sizeof(server)) < 0)
{perror("ERROR on binding");
exit(1);}
/*listen for just 1 connection*/
listen(sock,1);
mysock=accept(sock,(struct sockaddr *)0,0);
if (mysock==-1)
{
perror("accept failed");
exit(1);
}
write(mysock,"you are connected to: my server\n",55);
read(mysock,buff,sizeof(buff));
printf("%s\n",buff);
gets();
close(sock);
close(mysock);
return 0;
}
クライアントコード:
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
int main(int argc, char const *argv[])
{
int sock;
struct sockaddr_in server;
struct hostent *hp;
char buff[1024];
/*creation du socket*/
sock=socket(AF_INET,SOCK_STREAM,0);
if (sock<0)
{
perror("creation de socket echouer\n");
exit(1);
}
server.sin_family=AF_INET;
hp = gethostbyname(argv[1]);
if (hp == NULL) {
perror("ERROR, no such host\n");
exit(0);
}
printf("0\n");
server.sin_addr.s_addr=inet_addr("127.0.1.1");
server.sin_port=htons(5000);
printf("1\n");
if (connect(sock,(struct sockaddr *)&server,sizeof(server)<0))
{
perror("connection failed");
exit(1);
}printf("2\n");
read(sock,buff,sizeof(buff));
printf("%s\n",buff);
write(sock,"thanks for accepting me\n",25);
system("PAUSE");
close(sock);
return 0;
}
のような引数
引数を指定してプログラムを実行します。エラー表示を開始します – Anshuman
SOはデバッグサービスではありません。シンボルでコンパイルするには、デバッガ内でコードを実行し、プログラムを1行ずつトレースして、関連する変数の値を調べ、実際に何が起こっているのかを調べます。 *具体的な質問が発生した場合は、ここに戻って自由に感じてください。 – alk