Cでソケットプログラミングを実装しようとしています。クライアントがサーバー(Ubuntu)に接続しようとすると、「接続に失敗しました」などのエラーが表示されます。
だから問題はポートにあると思います。ソケットプログラミングには5454/tcpポートを使用します。
ポート5454がリッスンしているかどうかはどうすればわかりますか?それ以外の場合、UbuntuのCでTCPソケットプログラミングに使用できるポートは何ですか?これは単にポートの問題ですか、それとも私のコードに問題がありますか?それとも、LINUX Ubuntuに必要な設定はありますか?
編集する: コードセグメント:
int socket_send;
struct sockaddr_in address;
printf("\n Initialization Socket....");
socket_send = socket(AF_INET,SOCK_STREAM,0);
if(socket_send == -1)
{
perror("\n Socket not created.Error:");
return 1;
}
printf("\n Socket created");
address.sin_family=AF_INET;
address.sin_addr.s_addr=inet_addr(ip);
address.sin_port=htons(5454);
if(connect(socket_send,(struct sockaddr*)&address,sizeof(struct sockaddr))<0)
{
perror("\nConnetion failed.Error:");
return 1;
}
printf("\n Connected");
if(send(socket_send,(char*)buffer,size,flag)<0)
{
perror("\nSending failed.Error:");
return 1;
}
printf("\n Data successfully sent");
close(socket_send);
編集する:ポートに問題があって、先ほどUbuntuを再インストールしたら動作になりました。みんなありがとうございます。
ベストアンサー1
CIでプログラミングしていて、ポートが開いているかどうかを示す小さなフラグメントを公開したいので、文字列を出力するようにプログラムしました。ニーズに合わせて簡単に変更できます。
2番目の質問に答えるには、ここにいる誰もが言ったように、システムのスーパーユーザー(root)であり、他のアプリケーションでそのポートを使用していない場合は、ほぼすべてのポートを使用できます。ルートでない場合は、1024以上のポートを開くことができます。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
int main(int argc, char *argv[])
{
int portno = 5454;
char *hostname = "192.168.56.101";
int sockfd;
struct sockaddr_in serv_addr;
struct hostent *server;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
error("ERROR opening socket");
}
server = gethostbyname(hostname);
if (server == NULL) {
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,
(char *)&serv_addr.sin_addr.s_addr,
server->h_length);
serv_addr.sin_port = htons(portno);
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) {
printf("Port is closed");
} else {
printf("Port is active");
}
close(sockfd);
return 0;
}