トップページ⇒tech
1001コメント356KB

ネットワークプログラミング相談室 Port16

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/12/31(土) 14:07:24
主にソケットに関しての質疑応答スレッドです。

Programming UNIX Socket FAQ (日本語訳)
  http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
Winsock Programmer's FAQ (日本語訳)
  http://www.kt.rim.or.jp/~ksk/wskfaq-ja/

関連リンクは>>2-10辺り
足りなかったら適当に付け足してね

前スレ
ネットワークプログラミング相談室 Port15
http://pc8.2ch.net/test/read.cgi/tech/1128088448/
0367デフォルトの名無しさん2006/02/14(火) 13:03:28
>>364
>>366
返信ありがとうございます。

一緒にパイプを持って、それで抜けるようにします。
0368デフォルトの名無しさん2006/02/14(火) 16:29:49
>>365
経験上、帯域上限辺りまで使うと結構ひっくり返る希ガス
0369デフォルトの名無しさん2006/02/14(火) 20:03:38
raw socketを勉強しようと以下のようなプログラムを作ったのですが
SIO_RCVALLした所で10022が出るPCやWSARecvのところで10055が出るPCがあったりするのでお知恵を拝借させて頂けませんでしょうか
動かしてみたOSはWindows2000とWindowsXPです。Adminユーザーで実行してます。
----------------------------------------
#include <winsock2.h>
#include <mstcpip.h>
#include <stdio.h>

int main(int argc, char **argv){
SOCKET sock = INVALID_SOCKET; DWORD d, optval = 1, flags = 0, len; SOCKET_ADDRESS_LIST *addrlist; SOCKADDR_IN addr_in; WSADATA wsd; char buffer[65536]; int i; WSABUF wsb;
if (0 != WSAStartup(MAKEWORD(2, 2), &wsd)) goto err;
if (INVALID_SOCKET == (sock = WSASocket(AF_INET, SOCK_RAW, IPPROTO_IP, NULL, 0, 0))) goto err;
if (SOCKET_ERROR == WSAIoctl(sock, SIO_ADDRESS_LIST_QUERY, NULL, 0, buffer, 1024, &d, NULL, NULL)) goto err;
addrlist = (SOCKET_ADDRESS_LIST*)buffer;
if (0 == addrlist->iAddressCount) goto close;
addr_in.sin_addr.s_addr = ((SOCKADDR_IN*)(addrlist->Address[0].lpSockaddr))->sin_addr.s_addr;
addr_in.sin_family = AF_INET; addr_in.sin_port = htons(0);
if (SOCKET_ERROR == bind(sock, (SOCKADDR*)&addr_in, sizeof(addr_in))) goto err;
if (SOCKET_ERROR == WSAIoctl(sock, SIO_RCVALL, &optval, sizeof(optval), NULL, 0, &d, NULL, NULL)) goto err;
for(i = 0; i < 10;i++){
wsb.buf = buffer; wsb.len = sizeof(buffer);
if (SOCKET_ERROR == WSARecv(sock, &wsb, 1, &len, &flags, NULL, NULL)) goto err;
}
goto close;
err:
printf("ERR %u\n", WSAGetLastError());
close:
if (sock != INVALID_SOCKET){ shutdown(sock, SD_BOTH); closesocket(sock);}
WSACleanup();
return 0;
}
03703192006/02/16(木) 19:56:51
ttp://www.st.ryukoku.ac.jp/~kjm/security/ml-archive/port139/2003.03/msg00137.html で
> (1)ICF/ICSのサービスを開始しろ
> (2)Personal Firewallを停止しろ
(3)IPSEC Services サービスを開始しろ
MSDNのサンプルで
printf("NOTE: IPv6 does not currently support the SIO_RCVALL* ioctls\n");
ってのを見付けたんでサービス関係をその通りに動かして、IPv6がアダプタのプロパティに入ってないことを確認したんだけど状況かわらずです
WSA*を使っているのが間違いの元かとも思いWSASocket→socket、WSAIoctl→ioctlsocket、WSARecv→recvと変えてみてもやはり同じでした
RCVALLするまでの準備の部分に何か誤りがあるのでしょうか?
03713692006/02/16(木) 19:58:41
ハンドルのとこ間違って書き込んでしまいました319じゃなくて369です
0372デフォルトの名無しさん2006/02/16(木) 22:27:26
t est
0373デフォルトの名無しさん2006/02/18(土) 01:05:12
Win32APIスレでスレ違いと言われたので、こちらで質問します。
オープンしたソケットで利用中のNICのMACアドレスを得る方法を
教えていただけますでしょうか?
接続元、接続先のMACアドレスどちらでもかまいません。

OSはWindows XPです。
0374デフォルトの名無しさん2006/02/18(土) 01:10:16
getsockopt(s, NSPROTO_IPX, IPX_ADDRESS, &IPX_ADDRESS_DATA..);
で、IPX_ADDRESS_DATA::nodenumかな。
もちろん、IPXソケット限定だけど。
03753732006/02/18(土) 18:57:24
自己解決しました。
0376デフォルトの名無しさん2006/02/19(日) 12:29:09
市ね
0377デフォルトの名無しさん2006/02/21(火) 21:47:27
warota
0378^ω^ ◆8vOv.D2p4. 2006/02/22(水) 18:47:13
Winsockを使ったソフトを作っているのですが、

自分で立てる→127.0.0.1で接続 はできました。

ところが、人様に立ててもらって、IPを教えてもらったところ、接続しようとしても駄目でした。
その人は、自分のマシンで自作のチャットサーバを動かして、外部から接続できている、
と言ってるので、その人のネットワーク環境は特に問題なさそうです。(ポート解放等

自分→ループバック でできるのに、インターネット経由で繋がらない場合、
どんなミスがありえるんでしょうか・・・?
127.0.0.1の場合も、グローバルIPを入力しても、
同じコードで、 sin_addr.S_addr:=inet_addr(PChar(ip));
としてるので、本質的には同じだと思ってたんですが。。。

ちなみに、WSAAsyncSelectを使う非同期の、TCPソケットです。
開発環境はDelphi6Personal + ProjectJEDIのWinsock2.pas です。
0379^ω^ ◆8vOv.D2p4. 2006/02/22(水) 19:03:57
解決しました 他の人が立てたら普通に。
0380デフォルトの名無しさん2006/02/22(水) 22:18:47
C#のWindowsアプリでソケット通信の非同期サーバを
作っているのですが、切断時に

Socket.Close()

を行うと下記の例外が発生するのですが、
どうすれば回避できるでしょうか?

----------------
破棄されたオブジェクトにアクセスできません。
オブジェクト名 'System.Net.Sockets.Socket' です。
0381デフォルトの名無しさん2006/02/22(水) 23:03:51
UNIXのソケットプログラムで。

ソケットのファイルディスクリプタ(int)から通信が行われている自分側のポート番号取得することは可能?
accept したあとの子プロセスから呼び出される関数で、ファイルディスクリプタはもらうんだけど
struct sock_addr_in の構造体はスコープ外で直接アクセスできない、という条件です。
0382デフォルトの名無しさん2006/02/22(水) 23:07:57
getsockname/getpeername
0383デフォルトの名無しさん2006/02/22(水) 23:26:33
>>382
�d!
0384デフォルトの名無しさん2006/02/22(水) 23:33:12
>>373 >>378 >>380
このスレはアンチM$の粘着UNIXオタが常駐してるだけだから
winsockのまともな返答は期待できないと思った方が良い



そうだよな
おまえら
0385デフォルトの名無しさん2006/02/22(水) 23:35:40
だから俺はこう思う

このスレは「UNIXネットワークプログラミング相談室」と改名するか
UNIX板に移動した方がいいんじゃないかって

UNIX厨は隔離板から出てくるなよ
0386デフォルトの名無しさん2006/02/22(水) 23:40:35
なんか毎回クソ回答しかしない無能なUNIX使いが出張るスレだなあ・・
みたいなのはおれも感じてたが。
そうか。
0387デフォルトの名無しさん2006/02/22(水) 23:44:31
>>385
俺としては「WinSockプログラミング相談室」の方がいいかなあ。
UNIX厨が出てこられるとマジうざいんで。
03883822006/02/22(水) 23:51:46
Winsockなら分かるが、正直C#はわからん。
中身のないレスをするアンチUNIX厨は鬱陶しい。
0389デフォルトの名無しさん2006/02/23(木) 00:09:20

  ( ゚д゚)      UNIX厨言われちゃってるよ…
_(__つ/ ̄ ̄ ̄/_ 
  \/    /
     ̄ ̄ ̄
 
  ( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_ 
  \/    /
     ̄ ̄ ̄

  ( ゚д゚)
_(__つ/ ̄ ̄ ̄/_ 
  \/    /
     ̄ ̄ ̄

  ( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_ 
  \/    /
     ̄ ̄ ̄
0390デフォルトの名無しさん2006/02/23(木) 00:49:27
Windows XP で gethostbynameにて
C:\WINDOWS\system32\drivers\etcにある
hostsファイルに記述したホスト名から
IPアドレスを取得したいのですが、取得できません。
どうしてでしょうか?

例えばhostsファイルに
38.25.63.10 x.acme.com
のようにかいてgethostbynameでx.acme.comを指定してやれば
38.25.63.10が取得できると思っているのですが・・・
0391デフォルトの名無しさん2006/02/23(木) 01:01:36
>>390
コードさらさないでどうやってこたえろと
0392デフォルトの名無しさん2006/02/23(木) 01:44:46
winはlmhostsじゃなかったっけ。
とか数年前の記憶を元にほざいてみる。
03933822006/02/23(木) 01:44:50
>>390
> 取得できません。

これも状況を説明しないとね。gethostbynameはどうなるの?
03943822006/02/23(木) 01:48:21
>>392
ファイル名?
HOSTSで合ってるよ。

http://book.itzero.com/read/others/0505/Oreilly.Ipv6.Network.Administration.Mar.2005.eBook-LiB_html/0596009348/ipv6na-CHP-5-SECT-3.html
0395デフォルトの名無しさん2006/02/23(木) 10:58:07
>>380
たぶんそのソケットが既にCloseされてるから。
Connectedプロパティを確認してみてください。
なぜCloseされているのかはプログラムの作者以外誰にもわからない。
0396デフォルトの名無しさん2006/02/23(木) 20:38:55
質問です。
簡単なネットワーク対戦可能なインベーダーを作成中なのですが、
一般的に皆様がこのようなゲームを作成する場合、常に移動すべく玉の
座標情報送信処理は、どのような感じ・どのぐらいの間隔で行ってるのでしょうか?
(20msに一回、UDPにて更新処理を行おうかと思っていますが…)
0397デフォルトの名無しさん2006/02/23(木) 23:25:26
>>396
動いたら送信
動かなかったら送信しない

このとき送るのは可能な限り
差分ではなく適当な絶対値
0398デフォルトの名無しさん2006/02/23(木) 23:59:33
>>396
動きが計算できるタマだったらいちいち送る必要はないんじゃないか?
プレイヤーの座標を最優先する。
03993962006/02/24(金) 01:40:24
ありがとうございます。
動きに関しては誘導弾など可変の性質を持つものがあるので計算はできないです。
普段の座標情報(弾道)送信処理は
弾座標送信←20ms→弾座標送信←20ms→弾座標送信←20ms→弾座標送信…
のようになっていて、
キー入力によるプレイヤー座標の送信処理が発生した場合に
弾座標送信←x→人座標送信←20ms-x→弾座標送信←20ms→弾座標送信…
     └   ←20ms→   ┘
のような作りになっています。用はプレイヤー移動による座標送信処理は
定期的に20msごとに行われるサイクルの、その20msの中のどこかに割り込みが
入るみたいな感じで作ってあります。
二番目の質問である>どのくらいの間隔で行っているのでしょうか
というのは質問の仕方が悪かったです。

上記の仕組みで、間隔の20msは値として小さすぎるなどの問題はないでしょうか?
0400デフォルトの名無しさん2006/02/24(金) 01:42:12
>>399
遅延問題も兼ねるので、そのあたりはまるっきりあなたのセンスかと
0401デフォルトの名無しさん2006/02/24(金) 01:57:29
ちなみにプレイヤー座標が得られている限り、誘導弾は可変では無い。
そのへんの見極めが出来てないようでは
04023962006/02/24(金) 02:09:07
確かに個々のハードウェア・環境によっての遅延問題はプロトコルの仕様
云々以前の問題ですね・・やはり最適な値というか、問題なさそーな
値を自分で見つけるしかないということですかね。

ロックオンとか無しでの手動誘導です。プログラミング自体慣れていないので
アルゴリズム的なセンスがないのは痛感してます…

色々と参考になりました。ありがとうございます。
04033902006/02/24(金) 07:44:44
> 取得できません。

hostsファイルに記述してgethostbynameを呼ぶと復帰値NULLで
取得できませんでした。
lmhostsファイルに記述してgethostbynameを呼ぶと復帰値からIPアドレスを
取得できました。

どうしてhostsファイルを見にいってくれないんだろう?
0404デフォルトの名無しさん2006/02/24(金) 07:49:44
まさか、hosts.txtというオチでわ
0405デフォルトの名無しさん2006/02/24(金) 17:50:41

lngReturn = NetMessageBufferSend(NULL,address,fromname,
(BYTE *)msg,sizeof(WCHAR) * lstrlenW(msg));

Win2kではfromnameが反映され正常に送信できますが
WinXPSP2ではlngReturnに0xE1が戻ってきます。
fromnameをNULLにすれば正常送信できますが、勝手にマシン名が入ってしまいます。

何故?
XPでもfromnameを反映できる方法がありますか
04065972006/02/25(土) 09:17:04
生ソケットで、TCP/IPを実装する場合、
TCPの最初と最後の3wayとかの部分も自分で書くんですよね?
で、送るのはsendtoで良いと思うのですが、受け取るのはrecvfromですか?
つまり、生ソケットでTCP/IPを使う場合、UDP用のAPIを使うの?
0407デフォルトの名無しさん2006/02/25(土) 09:27:55
to, fromの部分は自分の役割じゃん。
だから普通send, recv。

>>6に実装リストあるよ。
0408デフォルトの名無しさん2006/02/26(日) 00:20:38
>>403
> hosts ファイルに記述して gethostbyname
> を呼ぶと復帰値 NULL で取得できませんでした。

ちゃんとマニュアル読めよ。

Return Values
If no error occurs, gethostbyname returns a pointer
to the hostent structure described above. Otherwise,
it returns a null pointer and a specific error number
can be retrieved by calling WSAGetLastError.

host ファイルを見に行く以前の問題だよ。


0409デフォルトの名無しさん2006/02/27(月) 04:10:48
windowsで非同期イベントを使ってサーバーを書いているのですが

SOCKET client_sock = accept(...);
HANDLE event = CreateEvent(...); // マニュアルリセットはfalse
...
WSAEventSelect( client_sock, event, FD_READ | FD_CLOSE );
...
while(1)
{
 result = WaitForMultipleObjects( event_size, event_array, false, INFINITE );
 switch( result )
 {
 ....
 }
}

サーバーサイドはこのような感じなのです。

クライアントサイドで、
send( ... ); //1回目
send( ... ); //2回目
などとやると、1回目は、WaitForMultipleObjectsから戻り、正常に受信するのですが、
二回目以降がWaitForMultipleObjectsから戻ってきません。
1回目と2回目の間にSleep(10)などを入れると、二回目も正常に受信するのですが、
これはどういうことなのでしょうか?
0410デフォルトの名無しさん2006/02/27(月) 05:40:42
>>409
1回目の処理が終わる前に受信しちゃうんでない?
0411デフォルトの名無しさん2006/02/27(月) 07:14:11
Nバイトのsend*2がN*2バイトのrecv*1でに変換されたんでしょ。
0412デフォルトの名無しさん2006/02/27(月) 08:53:05
生ソケットでUDPとかのプログラム組む時のソースって、
何で擬似パケットを用意するのですか?
0413デフォルトの名無しさん2006/02/27(月) 09:16:57
チェックサム値の算出の為、で合ってます?
0414デフォルトの名無しさん2006/02/27(月) 11:00:15
疑似ヘッダをデータ構造として持たなくても、
チェックサムの値は計算できるので、
プログラマの好みの問題としか言いようがない。
04154092006/02/27(月) 16:34:04
Sleepを入れないで二連続sendした後は、何のイベントも通知されなくなるんです。
FD_CLOSEも通知されません。
0416デフォルトの名無しさん2006/02/27(月) 16:40:36
eventの使い方を間違っているとかな。
0417^ω^ ◆8vOv.D2p4. 2006/02/27(月) 18:24:23
非同期のソケット用にAllocateHWndでウィンドウを作って、
メッセージループでイベントを受信→処理 としていますが、
この場合、AllocateHWndを呼び出したスレッドと、
作られたウィンドウのメッセージループは、
スレッドセーフにしなくても大丈夫ですよね?

Delphi+Winsock(WSAAsyncSelect)の話です
0418デフォルトの名無しさん2006/02/27(月) 18:29:31
XPでWinsockを利用すればIPヘッダやTCPヘッダを書きかえれるというのを聞きました
ところがSP2の導入でそれが不可能になったと聞きました。

そこで質問です、今現在IPヘッダ,TCPヘッダを書き換えて
パケットを送信する方法は無いのでしょうか?

以下の中に答えはあるんでしょうか?
�@SP2をアンインストールすればできる
�AWinPcapを利用すれば出来る
�BUnixだったら出来る
�C上記以外の方法で出来る
�Dなにやっても無理。現実は非情である。

色々間違った質問だと思いますが、良かったら答えてくださいませ
よろしくお願いします。
0419デフォルトの名無しさん2006/02/27(月) 18:34:26
答えられない人が横槍で感想を挟むのはスレ的に駄目なのかな?
でも。

>>418
ほほう!そうなんですか?
てっきりそーゆーのは
ネットワークカードのドライバ直で叩くんだと思ってました
0420デフォルトの名無しさん2006/02/27(月) 19:58:15
>>418
Linuxでpacket(7)とか。
ただ、ISPでフィルタリングされている場合は外に出ない。
04214092006/02/27(月) 20:22:30
>>410
すいません。レス見逃してました。
410さんの言うとおり、1回目の処理中に2回目のイベントが発生してるっぽいです。
WaitForMultipleObjectsが呼ばれている状態でシグナル状態になったイベントしか通達されてない状態(ぽい)です
どのように回避すればいいのでしょうか?
0422デフォルトの名無しさん2006/02/27(月) 21:04:26
>1回目の処理中に2回目のイベントが発生してるっぽい
これは何でわかったの?
0423デフォルトの名無しさん2006/02/27(月) 21:18:24
>>422
「発生してるっぽい 」ってことで予想です。
0424デフォルトの名無しさん2006/02/27(月) 21:28:02
FD_READがきたら、-1を返すまでrecvする必要があるけど。
0425デフォルトの名無しさん2006/02/27(月) 22:20:36
>>424
-1まで読むように書き換えたら正常に動くようになりました。ありがとうございます。
そうだったんですか。知りませんでした・・・
0426デフォルトの名無しさん2006/02/28(火) 11:00:18
受信したTCPパケットのヘッダ情報を取得するには
rawソケット使わないと駄目ですかね?
0427デフォルトの名無しさん2006/02/28(火) 12:35:01
>>418
とりあえず、WinPcapというか、その中のPacket.libを使えば
どんなイーサネットフレームの読み書きでもできる。
NDISレベルで読み書きするので、ATMとかFDDIでもOKだと思う。
イーサネットカードしか持ってないので知らんが。

ただし、パケットをイーサネット(データリンク)のヘッダまで含めて
自分で作らないといけない。Linuxのpacket socketなら、arpの解決
ぐらいはしてくれた気がするが、それもしてくれない。
iphlprのSendARP呼べば終わることだけど。

IP、TCPを書き換えてってのが、OSのスタックが吐いたパケットに
加工する、という意味なら、仮想インターフェイスを作って、
そこへ書き込まれたフレームを読んで、加工して、実インターフェイスに
書き出す、とか。
GREのトンネル作るとか、802.1qのタグ振るとか、MPLSのラベル割り込ませるとか、SoftEther的なもの
つくるとかだったらこっち。
仮想インターフェイスのつくり方は、openvpnとか、tapcontrol.exeとかでぐぐれ。
0428デフォルトの名無しさん2006/02/28(火) 15:51:15
ネットワークプログラミング初心者です。
418 さんの質問と多少かぶるのですが↓のような環境で
AのポートaaaaとSのポートbbbb」がTCP接続されているのですが、

[PC(A)]---[PC(B)]---[router(R)]---(TheInternet)---[Server(S)]
  (a) (b) (c)  (d)  (e)         (f)

(A)(a)192.168.1.2 OS:WinXP (ポートaaaaでクライアントを使用)
(B)(b)192.168.1.1 OS:WinXP (Windows付属のネットワーク共有(DHCP)が稼動)
(c)192.168.0.2
(R)(d)192.168.0.1
(e)202.yyy.yy.y
(S)(f)202.xxx.xx.x (ポートbbbbでサーバー稼動)

BでA←→S間のパケットを編集する場合どのようにしたらいいでしょうか。
VC#のraw Socketを使ってBを通過するパケットのIPヘッダーなどをモニター
したり、IPヘッダーを作ってB→Aに送ったりすることはできたのですが
AからのパケットをSに流さずにBで止める方法がわかりません。
427 さんのWinPcapをつかえば可能なのでしょうか。
なにとぞご教授のほどお願いします。
(ちなみにAのクライアントソフトはホストのIPとポートが固定なのでBで串などは
つかえそうにありません。)
0429デフォルトの名無しさん2006/02/28(火) 15:59:03
>>428
Aのクライアントソフト、これの詳細plzwっうぇwっうぇ
0430デフォルトの名無しさん2006/02/28(火) 16:00:48
>>428 (訂正)ずれました
[PC(A)]---[PC(B)]---[router(R)]---(TheInternet)---[Server(S)]
NIC~(a)~~~(b)~~(c)~~~(d)~~~~~(e)~~~~~~~~~~~~~~~~~~(f)
0431417^ω^ ◆8vOv.D2p4. 2006/02/28(火) 16:50:24
どうやら あまりに アホな 質問を して しまった ようだ
0432デフォルトの名無しさん2006/02/28(火) 20:48:26
PC(B)をWindows止めてLinuxでも入れたら?
0433デフォルトの名無しさん2006/02/28(火) 21:05:03
すれ違いかもしれませんが質問します。

コマンドプロンプトのnet viewでLAN上のPCの一覧が
表示されるんですが、どっかのPCが突然落ちた場合でも
net viewでそのPCがいつまでも表示されてしまいます。

nbtstat -Rとかやってもだめでした。

いい方法がありましたら教えてください。
0434デフォルトの名無しさん2006/02/28(火) 21:32:54
それはマスタブラウザがブラウズリストを保持してるから。
更新間隔を短くすれば、当然ネットワーク負荷はあがるが、
失効までの間隔も短くなる。
0435デフォルトの名無しさん2006/02/28(火) 22:33:37
それプログラミングじゃないし…
0436デフォルトの名無しさん2006/02/28(火) 22:53:10
ああなんだ。Sambaを改造する話か。
0437デフォルトの名無しさん2006/03/01(水) 01:27:29
>>428
1. 「Routing and Remote Access」サービスを止めるか、iphelperの
 EnableRouter()で、パケットのフォワーディングを止める。で、WinPcap
 使って、自分のプログラムでフォワーディングする。ついでに加工する。

2. NDISのフィルタドライバで、パケットのドロップ、加工を制御する。

のどちらかだと思うけど、1はダサい。やるなら2。
フィルタドライバはWINDDKのPassThruドライバを雛形にすれば良い。
WINDDKがめんどくさいか、MSDNに入ってなくて手に入らないなら、
ttp://www.ntkernel.com/w&p.php?id=7
のWinpkFilterが使えそうな気がする。privateかeducational useなら無料
らしい。

>>432の言うように、Linuxにするなら、iptablesのモジュールにするのが
手っ取り早いと思う。MASQUERADEみたいなもんか。
0438デフォルトの名無しさん2006/03/01(水) 12:40:10
>>437 的確なアドバイスありがとうございます。
2のNDISフィルタはDDKがないのと自分にはまだ敷居が高そうなので
とりあえず1のIpHelper+WinPcapを試すことにしました。

>>432 PC(B)がメインPCなので普段よく使うアプリなどの関係で
なかなかLinxにきりえにくに状況です。(PC(A)はスペック低すぎるので)
ただいつかはLinuxメインでいきたいとおもいます。
0439デフォルトの名無しさん2006/03/02(木) 02:17:44
snmpでsnmptrapだけ実装したいんだけど
net-snmpの実装があまりにもすぱっげちぃで
はきそうで
そのいいソース知ってる人いませんか?
0440デフォルトの名無しさん2006/03/02(木) 06:41:43
実装したいというのはどういうこと?
snmpのライブラリを書くわけ?
利用するコードを書くの?
0441デフォルトの名無しさん2006/03/02(木) 10:00:21
ソケットが開いてるか閉じてるか判定するにはどうしたらいいんですか?
0442デフォルトの名無しさん2006/03/02(木) 10:14:09
ソケットを開くにはどうすればいいんですか?
0443417^ω^ ◆8vOv.D2p4. 2006/03/02(木) 12:51:39
>>441
recvしてみて返り値がSOCKET_ERRORなら閉じてる
0以上なら繋がってる

じゃだめかな
0444デフォルトの名無しさん2006/03/02(木) 16:18:15
>>441
コネクション型だとして、getpeernameとか呼んでみたらどうかな。
0445デフォルトの名無しさん2006/03/02(木) 16:27:06
socket() が成功した後はずっと「開いている」状態だろ。
close() しない限り勝手に閉じないよ。

接続しているかそうでないかなら>>444
0446デフォルトの名無しさん2006/03/02(木) 20:55:16
はじめまして
実装上でアドバイスください
WinSockで TCPでデーターを読み込む場合
1つのセッションで全てを行ってもよろしいのでしょうか?

もちろん回線的には変わらないのでしょうが
内部のバッファ的にセッションをいくつか張ってデーターを
やりとりした方が有利なのでしょうか?
0447デフォルトの名無しさん2006/03/02(木) 20:57:07
分割ダウンロードみたいな話?
0448デフォルトの名無しさん2006/03/02(木) 21:00:52
>>446
一つのセッションだと、恐らく接続先は単一のサーバであって、
要求はたぶん一つ程度のスレッドで処理される。

要求を複数に分割できるのなら、複数に分けて並行して行えば
複数のサーバに分散されて処理されるかもしれないし、
そうでなくても複数のスレッドに分散されて、先方のCPUの
処理時間を多く利用できるかもしれない。

行儀は悪い。
04494412006/03/02(木) 22:11:01
なるほど、ありがとうございました!
04504462006/03/02(木) 22:22:37
ありがとうございます
サーバー側のほうまでは考えておりませんでした。
たしかにその通りですね。

クライアント側もWinsockですし
やはり単一スレッドでいじめない方がよろしいですよね?
Winsock1.0の頃はCPU負荷だけでデーター保障されてる
TCPでもデータートンでましたし・・・
0451デフォルトの名無しさん2006/03/03(金) 00:55:28
snmpのライブラリ作るのつらいです。
だれかtrapだけでも作り方教えてください
0452デフォルトの名無しさん2006/03/03(金) 02:10:53
>>451
perl の Net::SNMP::Transport あたりを参考にしてみれば。
Cのシンプルなやつもありそうだけど、簡単にググった程度では見つからなかった。
0453デフォルトの名無しさん2006/03/03(金) 03:28:13
CreateGaame〜陸海空オンライン〜
開発開始!力ある者だけこぃ!
0454417^ω^ ◆8vOv.D2p4. 2006/03/03(金) 13:18:17
>>453
ぐぐった
http://www112.sakura.ne.jp/~kaientai-project/creategame.htm

これはひどい
0455デフォルトの名無しさん2006/03/04(土) 05:06:27
Windows(xp)のRAWソケットは信用できん、とか聞いたのですが、
どこがどのように信用できないのでしょうか?
意図したようにちゃんと動かないとか?
0456デフォルトの名無しさん2006/03/04(土) 05:32:26
>>455
言った奴に聞け
0457デフォルトの名無しさん2006/03/04(土) 05:45:58
javaで作られたオープンソースのプロクシサーバーを教えて下さい。
0458デフォルトの名無しさん2006/03/04(土) 07:54:49
>>457
>>269
0459デフォルトの名無しさん2006/03/04(土) 08:35:45
レスありがとうございます。
javaでかかれたものはないでしょうか?
0460デフォルトの名無しさん2006/03/04(土) 08:43:14
>>459
>>269
0461デフォルトの名無しさん2006/03/04(土) 16:09:40
>>459
http://www.jumperz.net/index.php
0462デフォルトの名無しさん2006/03/04(土) 18:20:36
iTuneで『音楽を共有する』って機能がありますよね?
誰が自分のどの曲にアクセスしているのか調べるツールを作ろうかと思っています。
パケットを監視してどのIPに対してデータを送信しているのか調べるツールはフリーでも
既にあるようなので作れないことはないんじゃないかと。
ちなみに私はネットワークプログラミングの知識は今現在全くないです。
ネットで調べてはいるのですが、既に具体的なやり方を知っている方がいたら是非教えてください。参考になるサイトなどでも構いません。
言語はC++です。
よろしくお願いします。
0463デフォルトの名無しさん2006/03/04(土) 18:37:45
>>462
ttp://www.sysinternals.com/
0464デフォルトの名無しさん2006/03/04(土) 19:24:21
>>462
netstat -t
0465デフォルトの名無しさん2006/03/04(土) 23:41:22
>>462
WindowsならWinSock2でパケットを拾うことができる
WinSock2はNT系のみしか実装されてないけどね
拾うデータは完全に生のRAWパケットだから自前で分別して組み立てて判別しないといけない
0466デフォルトの名無しさん2006/03/05(日) 02:05:16
パケットの組み立てやってみたいんだけど
サンプルとかありますか?
HTTPだけでも対応してみたい
■ このスレッドは過去ログ倉庫に格納されています