WinSockについて
Posted: 2006年7月25日(火) 00:14
ちょっとした、チャットプログラムを組もうとしているのですが、実験段階でつまづいてしまいました。
Socketプログラムの知識があまりないので、これできるかどうかどうかも分かりませんがどなたか、教えてください。
サーバー側
クライアント側
で、x.x.x.xをローカルIPアドレスを指定すると、LAN内のパソコンでは、反応します。
グローバルIPアドレスにすると、エラーコードがタイムアウトになって帰ってきます。
PCのファイアウォールを切っても反応がありませんでした。
グローバルIPでも反応するにはどうすればいいと思いますか?
ルータの設定とかをいじらないといけないのでしょうか?
Socketプログラムの知識があまりないので、これできるかどうかどうかも分かりませんがどなたか、教えてください。
サーバー側
コード: 全て選択
#include "WinSock.idx"
'---------------------------
' Window Message Loop
'---------------------------
Dim msgMain As MSG, iResult As Long
Do
iResult=GetMessage(msgMain,0,0,0)
If iResult=0 or iResult=-1 Then Exit Do
TranslateMessage(msgMain)
DispatchMessage(msgMain)
Loop
' Call destructores and exit process
End
Declare Function bind Lib "ws2_32.dll" (s As DWord, ByRef name As Any, namelen As Long) As Long
Declare Function listen Lib "ws2_32.dll" (s As DWord, backlog As Long) As Long
Declare Function accept Lib "ws2_32.dll" (s As DWord, ByRef name As Any,ByRef namelen As Long) As Long
Declare Function WSAGetLastError Lib "ws2_32.dll" () As Long
Function main() As Dword
Dim wsaData As WSADATA,l As Long,buf[10] As Byte
Dim sock As Dword,sock0 As Dword,le As Long
Dim addr As SOCKADDR_IN
Dim client As SOCKADDR_IN
WSAStartup(MAKEWORD(2,0),wsaData)
sock0 = socket(AF_INET, SOCK_STREAM, 0)
addr.sin_family = AF_INET
addr.sin_port = htons(12345)
addr.sin_addr=htonl(0)
l=bind(sock0,addr, len(addr))
listen(sock0, 5)
le = Len(client)
sock = accept(sock0,client,le)
lstrcpy(buf,"HELLO")
' 5文字送信
send(sock,buf , 5, 0)
' TCPセッションの終了
closesocket(sock)
WSACleanup()
End
End Function
コード: 全て選択
#include "WHost.idx"
'---------------------------
' Window Message Loop
'---------------------------
Dim msgMain As MSG, iResult As Long
Do
iResult=GetMessage(msgMain,0,0,0)
If iResult=0 or iResult=-1 Then Exit Do
TranslateMessage(msgMain)
DispatchMessage(msgMain)
Loop
' Call destructores and exit process
End
Declare Function inet_addr Lib "ws2_32.dll" (cp As BytePtr) As Long
Declare Function WSAGetLastError Lib "ws2_32.dll" () As Long
Function main() As Dword
Dim wsaData As WSADATA,l As Long,k As String
Dim sock As Dword,buf[256] As Byte,i As long
Dim sockaddress As SOCKADDR_IN,h[32] As Byte
i=WSAStartup(MAKEWORD(2,0), wsaData)
' // ソケットの作成
sock = socket(AF_INET, SOCK_STREAM, 0)
' // 接続先指定用構造体の準備
sockaddress.sin_family = AF_INET
sockaddress.sin_port = htons(12345)
sockaddress.sin_addr = inet_addr("x.x.x.x")
' // サーバに接続
l=connect(sock,sockaddress, Len(sockaddress))
' // サーバからデータを受信
l=WSAGetLastError()
recv(sock, buf,7, 0)
k=Str$(l)+MakeStr(buf)
msgbox 0,k
WSACleanup()
End Function
グローバルIPアドレスにすると、エラーコードがタイムアウトになって帰ってきます。
PCのファイアウォールを切っても反応がありませんでした。
グローバルIPでも反応するにはどうすればいいと思いますか?
ルータの設定とかをいじらないといけないのでしょうか?