Winsock
Posted: 2010年11月22日(月) 22:16
チャットを作成しようと思って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();
}
サーバーを起動させてからコマンドプロントの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();
}