社内用のメンテナンスプログラムを制作したのですが、同じプログラムで他社の製品にも使えてしまいます。たいした大きさではないので、フロッピーで十分なんですが社外に流失してしまうとこまってしまいます。
IPアドレスで確認すればいいのですが、登録していないようなものはどうしたらよいのでしょうか?
どなたか、教えていただけませんか?

このQ&Aに関連する最新のQ&A

A 回答 (4件)

通信認証のサンプルを作成しました。


(正確に言うと、以前に作成したものがあって、それを抜粋しました)

プロジェクトは二つ必要で、サーバーとクライアントに分かれています。
それぞれにプロジェクトを作成して、EXEを作成してください。
基本はサーバーのEXEが立ち上がった状態で、クライアントのEXEを起動してください。
この書き込みの下の方に「共通の標準モジュール」を記してますが、[INIT_PORT][SERVER_NAME]の各定数があります。
こちらは環境に合わせて変更をしてください。
もし、一台のマシンで実験をするのであればSERVER_NAMEをご自分のマシン名に変更をしてください。

プログラムが正常に動くと、サーバー、クライントが交互に通信状況をメッセージボックスで知らせます。
これはあくまでサンプルなのでそのようにしてますが、サーバー側にはメッセージボックスの機能を使用しないでください。メッセージボックスが表示されている間は、他のユーザーとの通信ができなくなってしまいます。
(VBでそれを回避する方法があるのですが、動作が不安定になるために書きません)

このサンプルでは、互いに文字列を送信しています。
実践では、その文字列をパスワード認証に使用してはいかがでしょうか?



必要なもの

Project1.vbp(サーバー用)
フォーム
Winsock1(インデックスなし)
Winsock2(インデックスあり)

Project2.vbp(クライアント用)
フォーム
Winsock1(インデックスなし)

Winsockはメニューバーより
[プロジェクト]
[コンポーネント]
[Microsoft Winsock Control 6.0(かな?)]
を選択したらツールボックスにWinsockコントロールが現れます。
それをサーバー側に二つ、クライアント側に一つ、各フォームに貼り付けます。
サーバー側のWinsock2にはIndexプロパティに'0'ゼロをセットしてください。
その他のWinsockには値を入力しないでください。

あとは下のソースを貼り付けてください。
-----サーバーのフォーム内のソース(ここから)---------
Option Explicit

Private Sub Form_Load()
  Me.Caption = "SERVER"

  'ポートの初期化を行い、受信待ち状態にする
  On Error GoTo PGMERR
  
  With Me.Winsock1
    .LocalPort = INIT_PORT
    .Listen
  End With
  
  Exit Sub
  
PGMERR:
  Call MsgBox("通信ポートに以上が見られました、終了いたします。", vbSystemModal, Me.Caption)
  End
End Sub

'フォームが閉じる前に、Winsockを全て閉じる
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  Dim wkSock As Winsock
  
  With Me
    .Winsock1.Close
    For Each wkSock In .Winsock2
      wkSock.Close
    Next wkSock
  End With
End Sub

'特定のクライアントのソケットを閉じたとき
Private Sub Winsock2_Close(Index As Integer)
  With Me
    .Winsock2(Index).Close
    Unload .Winsock2(Index)
  End With
End Sub

'メッセージデータの受信
Private Sub Winsock2_DataArrival(Index As Integer, ByVal bytesTotal As Long)
  Dim strRecvData As String    '送られてきたデータ
  Dim lngRecvCnt As Long     '送られてきたデータライン数
  Dim valRecvAry As Variant   '送られてきたデータをライン数のに分解し配列にして記憶
  
  Dim wkVal    As Variant   '受信したメッセージ1文を、IDとメッセージに分解して配列で記憶
  Dim wkSType   As SOCKMSG_ID  '分解した1文のID
  Dim wkStr    As String    '分解した1文のメッセージ
  
  Dim i      As Long     'ループカウンタ
  
  Dim wkMsg    As String    '送信するメッセージ
  
  With Me
  
    'メッセージを受け取る
    .Winsock2(Index).GetData strRecvData
    
    '受信メッセージを、メッセージ分の配列にする
    valRecvAry = Split(strRecvData, vbCrLf)
    
    'メッセージ数を取得
    lngRecvCnt = UBound(valRecvAry)
    
    '受信メッセージの分だけ、一文ずつ処理を行う
    For i = 0 To lngRecvCnt - 1
    
      '一文をIDとメッセージに分解
      wkVal = Split(valRecvAry(i), vbNullChar)
      wkSType = wkVal(0)
      wkStr = wkVal(1)
      
      Select Case wkSType
        Case SOCKMSG_ID.ID1
          wkMsg = "山川豊"
          Call MsgBox("ID1で[" & wkStr & "]を受信しました" & vbNewLine & vbNewLine _
            & "ID1で[" & wkMsg & "]を送信します", vbSystemModal, Me.Caption)
          Call SendMsg(.Winsock2(Index), ID1, wkMsg)
          
        Case SOCKMSG_ID.ID2
          wkMsg = "起動してもいいよ"
          Call MsgBox("ID2で[" & wkStr & "]を受信しました" & vbNewLine & vbNewLine _
            & "ID2で[" & wkMsg & "]を送信します", vbSystemModal, Me.Caption)
          Call SendMsg(.Winsock2(Index), ID2, wkMsg)
      
      End Select
    Next i
  End With
PGMEND:
End Sub

'接続要求がきたら、新たなWinsockを用意する
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
  Dim lngNewIndex As Integer
  
  lngNewIndex = 0
  On Error Resume Next
  
  With Me
    '新たな受信装置を1つ追加する
    Do
      Err.Clear
      lngNewIndex = lngNewIndex + 1
      Load .Winsock2(lngNewIndex)
    Loop Until Err.Number = 0&
    On Error GoTo 0
    
    .Winsock2(lngNewIndex).Accept requestID
  End With
End Sub
-----サーバーのフォーム内のソース(ここまで)---------

-----クライアントのフォーム内のソース(ここから)-------
Option Explicit

'フォームロード時に接続を試みる
Private Sub Form_Load()
  Me.Caption = "CLIANT"

  With Me.Winsock1
    .RemoteHost = SERVER_NAME
    .RemotePort = INIT_PORT
    .LocalPort = 0
    .Connect
  End With
End Sub

'サーバーが落ちた
Private Sub Winsock1_Close()
  Call MsgBox("サーバーが落ちたー", vbSystemModal, Me.Caption)
  Unload Me
End Sub

'サーバーと接続できた
Private Sub Winsock1_Connect()
  Dim wkMsg  As String
  
  wkMsg = "岸部四郎"
  
  Call MsgBox("接続できた" & vbNewLine & vbNewLine _
      & "ID1で[" & wkMsg & "]を送信します", vbSystemModal, Me.Caption)
  Call SendMsg(Me.Winsock1, ID1, wkMsg)
End Sub

'サーバーと接続できなかった
Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
  Call MsgBox("接続できなかった", vbSystemModal, Me.Caption)
  Unload Me
End Sub

'メッセージデータの受信
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  Dim strRecvData As String    '送られてきたデータ
  Dim lngRecvCnt As Long     '送られてきたデータライン数
  Dim valRecvAry As Variant   '送られてきたデータをライン数のに分解し配列にして記憶
  
  Dim wkVal    As Variant   '受信したメッセージ1文を、IDとメッセージに分解して配列で記憶
  Dim wkSType   As SOCKMSG_ID  '分解した1文のID
  Dim wkStr    As String    '分解した1文のメッセージ
  
  Dim i      As Long     'ループカウンタ
  
  Dim wkMsg    As String    '送信するメッセージ
  
  With Me
  
    'メッセージを受け取る
    .Winsock1.GetData strRecvData
    
    '受信メッセージを、メッセージ分の配列にする
    valRecvAry = Split(strRecvData, vbCrLf)
    
    'メッセージ数を取得
    lngRecvCnt = UBound(valRecvAry)
    
    '受信メッセージの分だけ、一文ずつ処理を行う
    For i = 0 To lngRecvCnt - 1
    
      '一文をIDとメッセージに分解
      wkVal = Split(valRecvAry(i), vbNullChar)
      wkSType = wkVal(0)
      wkStr = wkVal(1)
      
      Select Case wkSType
        Case SOCKMSG_ID.ID1
          wkMsg = "鳥羽一郎"
          Call MsgBox("ID1で[" & wkStr & "]を受信しました" & vbNewLine & vbNewLine _
            & "ID2で[" & wkMsg & "]を送信します", vbSystemModal, Me.Caption)
          Call SendMsg(.Winsock1, ID2, wkMsg)
          
        Case SOCKMSG_ID.ID2
          Call MsgBox("ID2で[" & wkStr & "]を受信しました" & vbNewLine & vbNewLine _
            & "通信を終了します", vbSystemModal, Me.Caption)
          
          '''''ここに通信が正常にできたことを示すフラグを立てておく
          Unload Me
      End Select
    Next i
  End With
PGMEND:
End Sub
-----クライアントのフォーム内のソース(ここまで)-------

サーバー・クライアントのそれぞれに共通の標準モジュールとして、以下のソースを追加してください。
-----共通の標準モジュール(ここから)-------
Option Explicit

Public Enum SOCKMSG_ID
  ID1 = 1
  ID2 = 2
  ID3 = 3
End Enum
Public Const INIT_PORT As Long = 8000 '←このPORTは使用される確立が高いので、適当な値に変更したほうがいいかも?
Public Const SERVER_NAME As String = "PC_MACHINE_NAME" '←サーバー用のEXEのをおくマシン名

Public Sub SendMsg(inSock As Winsock, inSendType As SOCKMSG_ID, inSendMsg As String)
  Dim wkStr  As String
  
  With inSock
    '通信が可能なときに通信する
    If (.State = (sckConnected)) Then
      '通信の書式は
      ' 1.通信を送るときのID(SOCKMSG_IDを自分で作成、オリジナルの番号を振る)
      ' 2.vbNullChar(IDとメッセージとの区切り文字)
      ' 3.メッセージ(任意の文字列)
      ' 4.vbCrLf(文末を示す)
      wkStr = inSendType & vbNullChar & inSendMsg & vbCrLf
      
      'メッセージを送る
      .SendData wkStr
    End If
  End With
End Sub
-----共通の標準モジュール(ここまで)-------
    • good
    • 0
この回答へのお礼

そう簡単に作れるものではありませんよね。
本当にありがとうございます。
winsockは使ったことありますので、
サンプルから発展させられればと思います。
助かります。

お礼日時:2001/10/23 23:32

サンプルを作ってみようと思うのですが・・・



機能1.ドメイン
「ドメイン」という意味はわかりますか?
まずこちらから「ネットワークにドメインサーバーがあるかないか」という質問をこしたいのですが、、、
会社にはサーバーがありますよね?
もし意味がわからなかったら、会社のサーバー管理者に
「うちのネットワークにはドメインサーバーがあるの?」と聴いてみてください。
ドメインサーバーがないのであれば、この方法は無理です。

機能2.通信
ファイルサーバーでも何でもいいので、一台のマシンが通信の受信待ち状態で待機するEXEを起動する。
それで今回問題の社外に持ち出されたら困るEXEを起動する。
このとき通信を行う。
通信ができないのであれば、EXE終了


この二つの機能がメインです。
ですのでドメインを使用してるかどうかを教えてください。

ちなみに仕事の合間にサンプルを作成しておりますので(←いいのか?)、ちーと時間がかかると思います。
    • good
    • 1

ykkw_2001さんのおっしゃる通り、環境次第でどうにでもなりそうですね。



IPアドレスで確認しきれないということはDHCPを導入してるとか?
もしそれなら、ユーザー名が取れるし、ワークグループではなくドメインを使用したら、ネットワークに参加=社内環境とできるのでは?
なので、EXEにドメイン固定のロジックを追加してしまえばよいと思います。

さらに認証パスワードを起動時に入力などなど。

サーバーにもうひとつのEXEを用意して、そちらと通信が可能なときのみEXEが起動可能という方法もあります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
勉強不足で、”EXEにドメイン固定のロジックを追加してしまえばよいと”
理解できません。
具体例を挙げていただければ幸いです。

お礼日時:2001/10/23 15:48

利用環境次第でどうにでもなりそうですけど・・・



たとえば、IPで確認はダメなように書かれていますが、イントラネットの特定アドレスのマシンで認証するとか。
社内専用アプリケーションの存在をレジストリで確認してから、動作させるとか。

ID+パスワードに時間を絡めて、1回だけ実行できるようにするとか。

はずしてたらゴメンです。
    • good
    • 0
この回答へのお礼

どうもありがとうございました。
説明不足ですみません。
>社内専用アプリケーションの存在をレジストリで確認してから・・・
ん~。むずかしいですね。
アプリで社内専用がわかればいいんですけど・・。
パスワードは平気で渡す輩がいて・・。

お礼日時:2001/10/23 15:46

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QVPSのポート番号が漏れると脆弱性は増加する?

・VPSを借りているのですが、空けているポート番号はどれぐらい秘密にしておくべきなのでしょうか?
・例えば、サイトを訪れた人に、そのサーバで空けているポート番号を知られた場合、攻撃される恐れとかあるでしょうか?

→ポート番号は絶対に教えては駄目?
→ポート番号知ったからと言って、それだけではどうすることできない?

・そもそも他人のポート番号は、簡単には調べられないものなのでしょうか?

■環境
・CentOS

Aベストアンサー

わざわざ公開したり言いふらしてまわる必要性自体がないかと。
だいたい普通の人は他人のサーバの開いているポート番号なんざ気にしません。

アタックしたいとかそういう風に考えている人が気にするものであって、
適切に設定していなければ秘密にしていたところでさっくり調べる方法はありますし。
# nmap使えばいいだけのハナシ。(まあ、一部のポートはISP側で外にアクセスできないように規制されていることもありますが)

>サイトを訪れた人に、そのサーバで空けているポート番号を知られた場合、攻撃される恐れとかあるでしょうか?

サイト訪れなくてもてきと~にポートスキャンしているスクリプトとかもありますしねぇ。
VPSだと管理の弱い利用者が居れば、まずはそこから落とされて周辺のIP(同じVPSサービス使っている可能性がある)へと攻撃が広がっていくことでしょう。
# むか~し、期間限定で22番を内部に通していた時にさくらのVPSなアドレスからsshブルートフォースを貰いましたよ。(つまりVPSで乗っ取られたヤツが居た…ということですな。)

>→ポート番号知ったからと言って、それだけではどうすることできない?

23番ポートがあいていたらとりあえずtelnet接続しみっか~。
もしかしたらブルートフォースでログインできっかもしんね~なぁ。
と考える人はいるかもしれませんね。
22番も同様。
# 国内からなら不正アクセス禁止法で問えるかもしれませんが、国外からじゃねぇ…。
途中のルートにパケットキャプチャ仕掛けるのは難しいでしょうから、telnetやFTPでアカウント名やパスワードを途中で抜かれる。というのは考えにくいでしょうけど。

>・そもそも他人のポート番号は、簡単には調べられないものなのでしょうか?

先に書いた通り、コマンドでサクっと調べられますよ。
通らないポートもあるでしょうが。
# 元々は自分のところのセキュリティとか調べる為に使う為のコマンド…と考えるべきでしょうがね。


特定のポートに特定のパターンでアクセスがあったら、別のポートを開ける。
とかいうようなツールを仕込んである場合はコマンド1発…とは行きませんけどね。
# 「iptables ノック」辺りで検索してください。

わざわざ公開したり言いふらしてまわる必要性自体がないかと。
だいたい普通の人は他人のサーバの開いているポート番号なんざ気にしません。

アタックしたいとかそういう風に考えている人が気にするものであって、
適切に設定していなければ秘密にしていたところでさっくり調べる方法はありますし。
# nmap使えばいいだけのハナシ。(まあ、一部のポートはISP側で外にアクセスできないように規制されていることもありますが)

>サイトを訪れた人に、そのサーバで空けているポート番号を知られた場合、攻撃される恐...続きを読む

QVS2003で「プログラムから開く」のプログラム名称

いつもお世話になっております。
現在、VS2003にてVisual Basicでプログラムを開発しております。
開発したexeは、起動時のパラメータ(画像ファイルパス)により動きを分岐しております。
プログラム自体は正常に動いているのですが、プログラム名称が反映されていません。
具体的には、

・開発したプログラムはSetupにてインストールします。
・エクスプローラで画像ファイルを選択して右クリックします。
・「プログラムから開く」-「プログラムの選択」
・参照ボタンでインストールしたプログラムのexeを選択

ですが、一覧にアイコンは表示されるのですが、プログラム名称が空白です。
この名称のデータはどこで指定するのでしょうか?
VS2005では、何も苦労する事なく表示されたような気がしますが、VS2003だと表示されません。
ご教授のほど、よろしくお願いいたします。
XP Pro SP2/VS2003/VB/.NET Freamwork 1.1

Aベストアンサー

AssemblyInfo.vb に
<Assembly: AssemblyTitle("")>
という記述があると思います。これを
<Assembly: AssemblyTitle("XXXX")>
のようにすると、アプリケーションのタイトルが XXXX になります。
ただし、一度、"" の状態で「ファイルを開くプログラムの選択」で選択すると、レジストリの
HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache
に記録されてしまうみたいです。いったんこれを削除して、再度、「ファイルを開くプログラムの選択」で選択するとタイトルが表示されると思います。

Q最低限必要な開いておくべきポート番号

最低限必要な開いておくべきポート番号
インターネットに繋ぐ上で「最低限必要な開いておくべき
ポート番号のわかるページ」を探しています。
ルーターで設定するためです。どのポートを塞いでいくで
はなく、使うポートだけ開きたいためでもあります。

「メールの送受信・ホームページ作成(アップロード)・セキ
ュリティソフトで使用するポート番号、時刻あわせ等のシス
テムで使用するポート番号」のみ知りたいです。

Aベストアンサー

WAN→LAN(inbound)は、全て閉じます。
LAN→WAN(outbound)については、一般的に以下のポートを
開けます。

メール送信
→TCP25(メールサーバによってはTCP587)

メール受信
→TCP110

ホームページアップロード
→ftp(PASV)ならTCP20,TCP21
httpならTCP80

セキュリティソフトで使用するポート
→これはセキュリティソフトのアップデートに使用される
ポートのことだと思いますが、セキュリティソフトによって
異なると思います。たぶんTCP80を使用するケースが多いと思います。

時刻あわせ(NTP)
→UDP123

だいたいこんなところですが、いずれも代表的なものであり、
相手サーバによっては、あえて一般的なポート番号と
異なるポート番号でサービスを提供している場合もあります。
例えば、http://hostname:8080/ といったURLでアクセスする
Webページを利用しているのであれば、TCP8080を開ける必要があります。

なので、ルーターの設定は、たいていみんなinboundを全て閉じて、
outboundは全て開けます。
そしてoutboundの制御は、PC上にインストールしたセキュリティソフトの
機能を使って、信頼できるプログラム以外は通信を開始できないよう制御する
のが一般的だと思います。

WAN→LAN(inbound)は、全て閉じます。
LAN→WAN(outbound)については、一般的に以下のポートを
開けます。

メール送信
→TCP25(メールサーバによってはTCP587)

メール受信
→TCP110

ホームページアップロード
→ftp(PASV)ならTCP20,TCP21
httpならTCP80

セキュリティソフトで使用するポート
→これはセキュリティソフトのアップデートに使用される
ポートのことだと思いますが、セキュリティソフトによって
異なると思います。たぶんTCP80を使用するケースが多いと思います。

時刻あわせ(NTP)
→UDP123

だい...続きを読む

Q【VB2005】別のプログラムから別のプログラム起動

"A"というVB2005で、作成したプログラムがありまして、
メインのフォームがあり、
そこにボタンがあります。
Shellの関数を使って、クリックイベントで、
指定したExe"B"を立ち上げます。

そのExe"B"は、VB2005で作成したオリジナルのプログラムです。
プロジェクトは別で作った物と考えてください。

Exe"B"を起動した画面を[フォーム1]と考えて、
ボタンがあり、クリックすると
別の[フォーム2]が表示するはずなのですが、
特にエラーも掴まずに、Showで開くことができません。

しかし、Exe"B"からダイレクトに起動させて
ボタンをクリックしたら[フォーム2]が表示されます。

どうしたら、Exe"A"からExe"B"を起動して
Exe"B"からフォーム2を呼び出すことができるか、
考えられる要因などをアドヴァイスして頂けたら助かります。

Aベストアンサー

意味がよくわかりませんので、補足をお願いします。

A.EXE と B.EXE という実行ファイルがあり、それらは VB 2005 で
作ったもので……
A.EXE から Shell 関数で B.EXE を起動すると B.EXE が持っている
Form2 の表示が不可能となるが
A.EXE を起動していない状態で B.EXE を起動すると B.EXE が
持っている Form2 の表示が可能である。

という意味なのでしょうか?

A.EXE から B.EXE の起動と表示を行う箇所のコードも記述して
頂けると何かわかるかも知れません。

Qポート番号587だとウイルスチェックが機能しない

プロバイダはニフティです。
ニフティ以外のメールアドレスでも送信サーバは25番ポートを使用していたのですが、この度ポート番号587に変更しました。
すると、これまでノートンのインターネットセキュリティ2010で送信時に画面右下に表示されていたインジケーターが表示されなくなりました。
ということはポート番号587を使用すると、ウィルスチェックが行われないということになるのですが、インターネットセキュリティ2010の設定で、25番ポートと同じように、ウィルスチェックが行われ、インジケーターが表示されるようには出来るのでしょうか。
詳しい方がいらっしゃいましたらアドバイス宜しくお願い致します。

Aベストアンサー

最新版は、変化したかどうかわかりませんし、設定方法があるかは分かりませんので他の方の回答を待っていただくとして・・
以前のバージョンは、ポートが変わるとスキャンされないとあります。 ただ、ソフトが常駐しているので感染は防げるという事です。 
今回のそのポートは、送信側ですよね? 利用されているパソコンが、感染していなければ送信時はそれほど神経質にならなくても良いのではと思うのと、受信時に関しても最近はフリーメールでもサーバー側でウィルススキャンされている事が多いので、その部分に関しても神経質にならなくても・・とも思います。

「Norton サポート - お問い合わせ」
http://jp.norton.com/support/contact/contact.jsp?pvid=cs
正確な事は、サポートに聞いてみてください。

参考URL:http://updatecenter.norton.com/?inid=jp_hhobanner_updatecenter

Qプログラムが中断してしまう

こんにちは。VB初心者です。

以下の現象で困っています。

エクセルのマクロ(VBA)を起動させるとブレークポイントが設定されて
いるかのごとく処理があるステップで「中断」します。
(もちろんブレークポイントなど設定はしていません)
エラーで止まるのなら分かりますが、エラーではないようで「継続」
させると正常に終了します。

以前は同じモジュールなのにそんなことはなかったような気がします。
この現象は
ブレークポイントが実は設定されたままなのでしょうか?
それともやはりプログラム的にどこかおかしい箇所があるのでしょうか?

どなたかこころあたりのある方よろしくお願いします。

Aベストアンサー

負荷がかかっている場合(他のアプリケーションが立ち上がっている)や、エクセル自身が大きく、VBAのが実行されている途中で再計算がなされるような状況だと止まってしまう場合があります。

Book計算を手動に切り替えるとスムーズに流れました。

'計算手動
With Application
.Calculation = xlManual
.MaxChange = 0.001
.CalculateBeforeSave = False '保存前に再計算しない
End With

元に戻すのは
With Application
.Calculation = xlAutomatic '計算自動
.MaxChange = 0.001
.CalculateBeforeSave = True '保存前に再計算
End With

これを最初と最後に入れてみてください。私はそれで動くようになりました。
以上、EXCEL97 VBA

Qポート番号の振り方のルール

ネットの勉強中(趣味で)です。TCPヘッダーにあるポート番号は、例えばブラウザなどでwebページを見ようとすると、あて先ポート番号は80(HTTP)で、こちらから送る場合の発信元ポート番号は1025以上の番号だと本に書いてありましたが、80はRFCで規定されているとのことですが、では、発信元ポート番号はどのようなルールで誰が(例えばブラウザのプログラム?)が決めるのですか?ご存知でしたら教えてください。

Aベストアンサー

#2です。
ちょうどいいページがありましたのでご紹介しておきます。
こちらもご覧ください。
http://www.mm-labo.com/computer/tcpip/ipaddress/portsort.html

参考URL:http://www.mm-labo.com/computer/tcpip/ipaddress/portsort.html

Q下記の環境でプログラムを作成していましたが、エラーが発生してしまいまし

下記の環境でプログラムを作成していましたが、エラーが発生してしまいました。
対応わかる方がいらっしゃいましたら、教えてください。

OS:WindowsXP Pro
プログラム:Microsoft Visual Basic 2008(Visual Studio 2008)
DB:SQL Compact 3.5
参照設定:System.Data.SqlServerCe
C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Desktop\System.Data.SqlServerCe.dll

プログラム内容
Imports System.Data.SqlServerCe

1: Dim cn As New System.Data.SqlServerCe.SqlCeConnection
2: Dim SQL As System.Data.SqlServerCe.SqlCeCommand
3: Dim dr As System.Data.SqlServerCe.SqlCeDataReader

1のDB接続の宣言部分で

エラー 1 基本クラス 'System.Data.Common.DbConnection' を含むアセンブリ 'System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' への参照が必要です。参照をプロジェクトに追加してください。

2と3も類似のエラーが発生しています。
いろいろ調べてみたら参照設定がされてないということがわかったんですが
プロジェクト>追加 からの参照設定はしており、対策方法がみあたりません。

もし対策がわかりましたら教えてください。よろしくお願いします。

下記の環境でプログラムを作成していましたが、エラーが発生してしまいました。
対応わかる方がいらっしゃいましたら、教えてください。

OS:WindowsXP Pro
プログラム:Microsoft Visual Basic 2008(Visual Studio 2008)
DB:SQL Compact 3.5
参照設定:System.Data.SqlServerCe
C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Desktop\System.Data.SqlServerCe.dll

プログラム内容
Imports System.Data.SqlServerCe

1: Dim cn As New System.Data.SqlServerCe.SqlCeConnection
2: Di...続きを読む

Aベストアンサー

Sytem.Dataに対する参照設定を忘れていませんか?
System.Data.SqlServerCeだけだと DataTableやDataSetなどのDBを扱う基本部分が含まれていないので質問のようなエラーになるのではと思います

Qポート番号について教えてください

ポート番号において
(前者)IPマスカレード機能において、1つのグローバルIPアドレスで複数のコンピューターが同時に通信を行うため、ポート番号をプライベートアドレス(PC)ごとに適当に割り当てて、通信のつどポート番号を変換し、限りあるグローバルIPアドレスの枯渇を防ぐ場合と
(後者)ポートを指定し、識別番号をつけることによってどのアプリケーションでデータを受け取るかを決める場合と
同じ「ポート番号」という言葉が使われていますが、この違いはなんなのでしょうか。

自分で考えてみたのですが、
前者は、IPマスカレード機能はルーターの1つのグローバルIPアドレスを複数のポート番号に割り当てることによりLAN上の複数のプライベートIPアドレスを利用できるようにしたもので
後者は、LAM側にあるPCのプライベートIPアドレスに複数のポート番号を割り当てて同時に複数のアプリを動かすことを実現している違いでしょうか。
つまり、何に対してポート番号を割り当てるかの違いがあるかということです。

また、この2つはルーターの設定で行うと考えてよいのでしょうか。

ややこしい質問かもしれませんが、どう把握したらよいか教えてください。

ポート番号において
(前者)IPマスカレード機能において、1つのグローバルIPアドレスで複数のコンピューターが同時に通信を行うため、ポート番号をプライベートアドレス(PC)ごとに適当に割り当てて、通信のつどポート番号を変換し、限りあるグローバルIPアドレスの枯渇を防ぐ場合と
(後者)ポートを指定し、識別番号をつけることによってどのアプリケーションでデータを受け取るかを決める場合と
同じ「ポート番号」という言葉が使われていますが、この違いはなんなのでしょうか。

自分で考え...続きを読む

Aベストアンサー

>例えば、後者では、アプリが使用するポート番号で、ホームページを見るときは80番、メールを送信するときは25番を使うみたいなのですが、前者では、これをグローバルIPアドレスに割り当てるポート番号として重複して80番や25番といった番号は使えなくなってしまうのでしょうか。

80番や25番などのウェルノンポートは、「サーバ側」のポート番号です。
クライアント側は任意の(TCP/IPのドライバ等が適当に付ける)ポート番号を使用します。
ルータ側で静的マスカレードなどの設定がされている場合は、関連づけられたポート番号は「送信側ポート番号」には使用されないはずです。

Webサーバに接続したとき、クライアント側が12345番ポートからサーバ側の80番ポートに接続すると、
クライアントからの送信パケットには送信元IPアドレスにクライアントマシンのIPアドレス、送信元ポートに12345番、宛先IPアドレスにサーバのIPアドレス、宛先ポート番号に80番。
というヘッダがついて送信されます。
サーバ側からのパケットの場合、送信元IPはサーバのIP、ポート番号は80番で、宛先はクライアント側のIP、宛先ポート番号は12345番となります。
ルータはこの間に入って、宛先、送信元のそれぞれの情報を記憶、書き換えた上でパケットを中継します。
サーバ宛に送るときはIPアドレスをルータ自身のIPアドレスに、ポート番号はルータが任意に決めた番号に。
サーバから戻ってきたら宛先をクライアント側の情報に書き換えて返してくれます。

>例えば、後者では、アプリが使用するポート番号で、ホームページを見るときは80番、メールを送信するときは25番を使うみたいなのですが、前者では、これをグローバルIPアドレスに割り当てるポート番号として重複して80番や25番といった番号は使えなくなってしまうのでしょうか。

80番や25番などのウェルノンポートは、「サーバ側」のポート番号です。
クライアント側は任意の(TCP/IPのドライバ等が適当に付ける)ポート番号を使用します。
ルータ側で静的マスカレードなどの設定がされている場合は...続きを読む

Qfor loop の処理が途中でプログラムを終えてもつづいてしまうのをやめさせるには?

お世話になります。



for a = 1 to 10000

~~処理~~

now = Timy
While Timy < now + 2
DoEvents
Wend

loop


~~

とコーディングしてるのですが
途中でプログラムを終わらしても
コンピューターの方でプログラムが続いてるみたいなのですが終わらすにはどうすればよいでしょうか?

Aベストアンサー

#3です。
コマンドボタンを1つつくって
Dim a As Single

Private Sub Command1_Click()

For a = 1 To 1000000

If Command1 = True Then Exit For

Next a

Command1.Caption = "終了"
Unload Me

End Sub
もう少したりないかな。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング