サーバ用 server.c
#include <stdio.h>
#include <winsock2.h>
#define debug
//関数宣言 プロトタイプ宣言
void sessionTCP(int sv_port);
void main(void){
int sv_port = 34000; sessionTCP(sv_port);
}
//接続用 TCP
void sessionTCP(int sv_port){
int err_ws; SOCKET sock_s; SOCKET sock_c; struct sockaddr_in addr; struct sockaddr_in client; BOOL yes = 1; WSADATA ws; err_ws=WSAStartup(MAKEWORD(2,0),&ws); if(err_ws != 0){ exit(1); } sock_s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (sock_s == INVALID_SOCKET){ printf("socket : %d\n", WSAGetLastError()); } addr.sin_family = AF_INET; addr.sin_port = htons(sv_port); //addr.sin_addr.S_un.S_addr = INADDR_BROADCAST; addr.sin_addr.S_un.S_addr = INADDR_ANY; setsockopt(sock_s,SOL_SOCKET, SO_REUSEADDR, (const char *)&yes, sizeof(yes)); #ifdef debug printf("bind start...\n"); #endif if(bind(sock_s,(struct sockaddr *)&addr,sizeof(addr))!=0){ printf("bind error\n"); } #ifdef debug printf("listen start...\n"); #endif listen(sock_s, 5); int sock_s_len=sizeof(client); char revcmd[100]; while(1){ #ifdef debug printf("accept start..."); #endif sock_c = accept(sock_s, (struct sockaddr *)&client,&sock_s_len); printf("IP:%s PORT:%d\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port)); scanf("%s",revcmd); send(sock_c,revcmd,sizeof(revcmd), 0); closesocket(sock_c); } WSACleanup();
}
クライアント用 client.c
#include <stdio.h>
#include <winsock2.h>
#include <stdlib.h>
#define debug
void sessionTCPstart(char *IPAddress,int port);
int main(){
char ip[]="xxx.xxx.xxx.xxx";
int port=34000;
sessionTCPstart(ip,port);
return 0;
}
void sessionTCPstart(char *IPAddress,int port){
char ip[16]; strcpy(ip,IPAddress); WSADATA wsaData; struct sockaddr_in server; SOCKET sock; char cmd[256]; WSAStartup(MAKEWORD(2,0), &wsaData);
while(1){
#ifdef debug
printf("connect start...\n");
#endif
sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == INVALID_SOCKET){ printf("ソケットエラー\n"); } server.sin_family = AF_INET; server.sin_port = htons(port); server.sin_addr.S_un.S_addr = inet_addr(ip); if(connect(sock, (struct sockaddr *)&server, sizeof(server))){ printf("connect error\n"); } memset(cmd, 0, sizeof(cmd)); int n = recv(sock, cmd, sizeof(cmd), 0); printf("%s",cmd); if(strcmp(cmd,"-exit")==0){ exit(1); } closesocket(sock);
}
WSACleanup();
}
コンパイラはGCCを使用しております。
「gcc -lwsock32 server.c -lws2_32 -o server -m32」
「gcc -lwsock32 client.c -lws2_32 -o client -m32」
でコンパイルしています。
ローカルIPでは問題なく通信できました。
グローバルIPでやろうとするとまったく通信ができないです。
CONNECTに失敗します。ルータでポート転送設定はしており、サーバ設置PC
ではESETのセキュリティソフトを使用しておりますがそちらもポートを空けて
おります。それでも通信ができません。
どうすれば通信できますか。
お力をお貸しください。
NOTEPAD+で開発しております。
回答1件
あなたの回答
tips
プレビュー