ページ 11

Winsock

Posted: 2010年11月22日(月) 22:16
by 一生初心者
チャットを作成しようと思ってWinsockを使いました。
サーバーを起動させてからコマンドプロントのtelnetでグローバルIPにアクセスしたところ
接続できませんでした。
localhostだと接続できます。
いったいなぜでしょうか?
どのように改善したらよろしいですか?

#include <stdio.h>
#include <winsock2.h>
#include <time.h>

int main()
{
WSADATA wsaData;
SOCKET sock0;
struct sockaddr_in addr;
struct sockaddr_in client;
int len;
SOCKET sock;
BOOL yes = 1;
BYTE buf[1024];
char data[1024];
int recN;

WSAStartup(MAKEWORD(2,0), &wsaData);

sock0 = socket(AF_INET, SOCK_STREAM, 0);

addr.sin_family = AF_INET;
addr.sin_port = htons(57630);
addr.sin_addr.S_un.S_addr = INADDR_ANY ;

setsockopt(sock0,
SOL_SOCKET, SO_REUSEADDR, (const char *)&yes, sizeof(yes));

bind(sock0, (struct sockaddr *)&addr, sizeof(addr));

listen(sock0, 5);

while (1) {
len = sizeof(client);
sock = accept(sock0, (struct sockaddr *)&client, &len);
recN = recv(sock,buf,sizeof(buf),0);

printf("相手の発言->%s\n"buf);
printf("自分の発言->");
scanf("%s"&buf);

send(sock,buf,strlen(buf),0);

}

closesocket(sock0);

WSACleanup();

}

Re:Winsock

Posted: 2010年11月23日(火) 00:11
by softya
自分自身のグローバルIPには接続できません。
それじゃないですか?

Re:Winsock

Posted: 2010年11月23日(火) 00:37
by 一生初心者
>自分自身のグローバルIPには接続できません。
そうなんですか?
プログラム事態に間違えはないのですかね?
別のインターネット環境からなら接続できますかね?

Re:Winsock

Posted: 2010年11月23日(火) 00:42
by shiro4ao
ルータなどがある場合はアクセスできなかったようですが
記憶違いだったらすみません。

まずは、1台のパソコンでクライアントとサーバーをつくって
通信してみてはいかがでしょうか?

チャットについては以下のページが参考になるかもしれません。
http://ameblo.jp/wsh1706/entry-10391982209.html

Re:Winsock

Posted: 2010年11月23日(火) 00:48
by 一生初心者
一台のパソコンでは実装できました。
一台のパソコンや自分のネットワーク上(自分の家の他のパソコン)とチャットしてもつまらないので
インターネット上の誰かとやろうと思って今回の作成に踏み込みました。

Re:Winsock

Posted: 2010年11月23日(火) 01:02
by softya
残念ですが、他の人と接続テストするしかありません。

>プログラム事態に間違えはないのですかね?
ルータのポート開放とかの問題が無ければ接続できると思います。

Re:Winsock

Posted: 2010年11月23日(火) 01:07
by shiro4ao
インターネット越しのアクセスとなると、
ルータのポートの設定が必要になってきます。

「簡易ポートスキャンスクリプト」で調べていただければ
インターネット側から、ポートが相手いるか確認してくれる
サイトがありますので、そちらで確認なさってはいかがでし
ょうか?

Re:Winsock

Posted: 2010年11月23日(火) 01:09
by 一生初心者
>残念ですが、他の人と接続テストするしかありません。
>ルータのポート開放とかの問題が無ければ接続できると思います。

そうですか。
わかりました。ありがとうございます。(T_T)