

クライエントプログラムを起動もしていないのに、アクセスがありましたと表示されます。
どこが悪いのか教えてくださいませんでしょうか?
サーバー側
#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;
}
No.1ベストアンサー
- 回答日時:
>accept(s , (SOCKADDR *)&addr2 , &sizeaddr2);
acceptに失敗した場合は?
戻り値をちゃんとチェックしましょう。
回答ありがとうございます。
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;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby vscode 文字化け 1 2022/05/21 19:17
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- UNIX・Linux raspberry piを使ったWebサーバー制作をしています、接続するネットワークを変更したときに 1 2023/01/09 15:57
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- TOEFL・TOEIC・英語検定 With its architecture and gardens and a wealth of 0 2022/12/17 16:11
- その他(教育・科学・学問) 英文論文の引用の仕方で、「S V in a database.」のdatabaseに引用したい場合 2 2022/05/30 10:12
- その他(プログラミング・Web制作) pythonでのリスト内抽出について 1 2022/03/23 14:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語での引数の省略方法
-
C言語の仮数部の設定
-
if と配列の組み合わせ
-
C言語のポインタ
-
C言語 エラーの原因がわからな...
-
ColorをRGBで指定する方法
-
演算子オーバーロードのプログ...
-
for文を別のint内で定義し、初...
-
VC++で作成したDLLをVBから呼ぶ...
-
ラップ関数とはどんなものですか?
-
{}が・・・・。
-
デバックをお願いします。
-
C の配列
-
簡単なようで分からない?for文...
-
c# 行と列 どっちが先?
-
List<T>のタイプを調べる方法は?
-
商と剰余を同時に求める(C言語)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
ラップ関数とはどんなものですか?
-
C言語 エラーの原因がわからな...
-
(int *)の意味
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
構造体の勉強中です 合計点の高...
-
windows-findstrの正規表現を使...
-
C言語で分からないところがあり...
-
int型の変数値をバイト列として...
-
PowerShellがうまくいかない
-
C言語での奇数の和
-
「{ } で囲むだけ」は正しい?
-
std::set<int> で、ある値が何...
-
実数の整数部,小数部の取得
-
エラー 添字が付けられた値が、...
-
int16_t の _t は何?
おすすめ情報