重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

クライエントプログラムを起動もしていないのに、アクセスがありましたと表示されます。
どこが悪いのか教えてくださいませんでしょうか?
サーバー側
#include <stdio.h>
#include <winsock2.h>
int main() {
WSADATA wsaData;
LPHOSTENT host;
SOCKET s;
SOCKADDR_IN name = { AF_INET } , client;
int client_addr=sizeof(SOCKADDR_IN);
SOCKADDR_IN addr,addr2;
addr.sin_family=AF_INET;
addr.sin_port=2048;
IN_ADDR ip;//実際と異なるアドレス
ip.S_un.S_un_b.s_b1=180;
ip.S_un.S_un_b.s_b2=328;
ip.S_un.S_un_b.s_b3=9;
ip.S_un.S_un_b.s_b4=56;
addr.sin_addr=ip;
WSAStartup(2 , &wsaData);
s = socket(AF_INET , SOCK_STREAM , 0);
bind(s , (SOCKADDR *)&addr , sizeof(addr));
listen(s , 1);
int sizeaddr2=sizeof(addr2);
accept(s , (SOCKADDR *)&addr2 , &sizeaddr2);

printf("アクセスがありました\nポート %d : アドレス = %s\n" ,addr.sin_port , inet_ntoa(addr.sin_addr));
shutdown(s , SD_BOTH);
closesocket(s);
WSACleanup();
getchar();
return 0;
}
クライエント側
#include <stdio.h>
#include <winsock2.h>
int main()
{
while(1)
{
WSADATA wsaData;
SOCKET s;
WSAStartup(2 , &wsaData);
s = socket(AF_INET,SOCK_STREAM , 0);
IN_ADDR ip;//実際と異なるアドレス
ip.S_un.S_un_b.s_b1=180;
ip.S_un.S_un_b.s_b2=328;
ip.S_un.S_un_b.s_b3=9;
ip.S_un.S_un_b.s_b4=57;
SOCKADDR_IN addr;
addr.sin_family=AF_INET;
addr.sin_port=2048;
addr.sin_addr=ip;
connect(s,(PSOCKADDR)&addr,sizeof(SOCKADDR));
send(s,"OK",3,0);
shutdown(s , SD_BOTH);
closesocket(s);
WSACleanup();
}
return 0;
}

A 回答 (1件)

>accept(s , (SOCKADDR *)&addr2 , &sizeaddr2);



acceptに失敗した場合は?
戻り値をちゃんとチェックしましょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
socket(AF_INET,SOCK_STREAM,0)で検索したら、
サンプルソースがありました。
以下のような感じでできました。
///-----------Server------------------///
#include<stdio.h>
#include<winsock2.h>
//ws2_32.lib
int main()
{
WSADATA wsaData;
WSAStartup(2,&wsaData);
SOCKET Soc;
SOCKET Sok;
sockaddr_in Server;
sockaddr_in Client;
int Length=sizeof(Client);
Server.sin_family=AF_INET;
Server.sin_port=9000;
Server.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
Soc=socket(AF_INET,SOCK_STREAM,0);
bind(Soc,(struct sockaddr *)&Server,sizeof(Server));
char Str[128];
listen(Soc,5);
Sok=accept(Soc,(struct sockaddr *)&Client,&Length);
if(Sok<0)
{
printf("Accept error\n");
closesocket(Soc);
closesocket(Sok);
WSACleanup();
return -1;
}
while(1)
{
int Len=recv(Sok,Str,sizeof(Str),0);
if(Len<0){printf("ReceiveError");break;}
Str[Len]='\0';
printf("%s\n",Str);
}
closesocket(Soc);
closesocket(Sok);
WSACleanup();
return 0;
}
///-----------Client------------------///
#include<stdio.h>
#include<winsock2.h>
//ws2_32.lib
int main()
{
WSADATA wsaData;
WSAStartup(2,&wsaData);
SOCKET Soc;
struct sockaddr_in Client;
Client.sin_family=AF_INET;
Client.sin_port=9000;
Client.sin_addr.S_un.S_addr=inet_addr("192.168.1.15");
Soc=socket(AF_INET,SOCK_STREAM,0);
if(connect(Soc,(struct sockaddr *)&Client,sizeof(Client))<0)
{
printf("ConnectError");
closesocket(Soc);
WSACleanup();
return -1;
}
else
{
printf("Connection OK\n");
}
while(1)
{
char Str[128];
gets(Str);
if(strcmp("exit",Str)==0){return 0;}
if(send(Soc,Str,strlen(Str),0)<0)
{
printf("SendError");
break;
}
}
closesocket(Soc);
WSACleanup();
return 0;
}

お礼日時:2004/09/09 12:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!