質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

3718閲覧

特定のソケットの切断方法が分からない

dem0nmichik0

総合スコア37

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2018/10/28 08:03

解決済みの質問「TCP/IPでソケットが突然切断されてしまうのはなぜでしょうか?」に関係するので,追加で質問します.

【実現したいこと】
シミュレータ6個とクライアントPC兼サーバPCの受信タスク(A.exe)が6個のソケットを接続しているのですが,突然ソケットが「LISTENING」と「SYNSEND」状態になります.
シミュレータとクライアントPC兼サーバPCがポート番号「11111」,「11112」,「11113」,11114」,「11115」,「11116」で接続しているときに,「11112」が「LISTENING」と「SYNSEND」状態になっているソケットを切断したいのですが,同じプロセス内のソケットが切断確立していないソケットの接続切断方法が分からなくて困っています.
netstatのオプションで特定のポート番号を切断できたりできるのでしょうか?ご教授お願いいたします.

【試したこと】
・「netstat -aobp tcp」でプロセスIDとプロセス名を表示後,「tasklist /svc」でA.exeのプロセスIDをkillすると6つの全ソケットが切断されてブザーが鳴動することは確認しました.

【試験環境】
サーバPC(シミュレータ6個起動)-----クライアントPC兼サーバPC-----クライアントPC2
|--クライアントPC3

【各装置の補足情報】
・シミュレータ(機能):画面表示PC(クライアントPC)に画面情報を送信する.画面表示PCからはアンサー情報を受信する.画面情報の送信およびアンサー情報の受信が成功の場合,シミュレータ画面上に接続成功を示す緑●(接続成功),画面情報の送信またはアンサー情報の受信が失敗の場合,赤●(接続失敗)を表示する.
・クライアントPC兼サーバPC(機能):シミュレータから情報を受信し画面表示する.受信した情報が正常ならば,アンサー情報をシミュレータに送信する.シミュレータから情報を受信している間,クライアントPCにシミュレータから受信した情報を送信する.
・クライアントPC(機能):クライアントPC兼サーバPC(機能)が送信する情報を受信して,受信情報が正常ならば画面表示する.
クライアントPC兼サーバPCとクライアントPCは,同じソフトで,iniファイルで起動するタスクを分けています.タスクは全部で4つ(Main.exeとA.exe,Server.exe,Client.exe)あり,クライアントPC兼サーバPCのときは,Main.exe(画面表示用)とA.exe(シミュレータからの受信用),Server.exe(クライアントPCに送信用)が起動します.クライアントPCのときはMain.exe(画面表示用)とClient.exe(クライアントPC兼サーバPCからの受信用)が起動します.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

netstatのオプションで特定のポート番号を切断できたりできるのでしょうか?

おそらく、不可能です。


サードパーティ製ですが CurrPorts であれば可能かもしれません。私自身は利用したことがないため、自己責任でどうぞ。

CurrPorts is network monitoring software that displays the list of all currently opened TCP/IP and UDP ports on your local computer. For each port in the list, information about the process that opened the port is also displayed, including the process name, full path of the process, version information of the process (product name, file description, and so on), the time that the process was created, and the user that created it.
In addition, CurrPorts allows you to close unwanted TCP connections, kill the process that opened the ports, and save the TCP/UDP ports information to HTML file , XML file, or to tab-delimited text file.

投稿2018/10/29 11:12

yohhoy

総合スコア6191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dem0nmichik0

2018/10/29 13:08

yohhoy様,回答ありがとうございます. 自分のPCならば,問題なくやってみるのですが,会社のPCなので今回,教えていただいた方法は遠慮させていただきます.ありがとうございました.
guest

0

ベストアンサー

>netstatのオプションで特定のポート番号を切断できたりできるのでしょうか?
netstatのオプションでは、私は残念ながら知りません。
切断に関しては、netstatが使用しているIP Helper API使えば可能だったと思います。(関数SetTcpEntryとMIB_TCP_STATE_DELETE_TCBで検索してください)
アプリとしてTcpViewなどが有名?です。これで切断できるか試すことも可能

しかし、この方法は、本来アプリでの解決方法ではないように思えます、最終手段として考えた方がいいです。

接続元のポートを固定していませんか?
接続先と元のIPとポートまで固定されている場合、切断後すぐに接続できないケースがあったように思います。
もっと詳しいネットワーク状態を説明をすれば、回答できる方も増えると思いますよ

投稿2018/10/29 03:50

tmp

総合スコア277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dem0nmichik0

2018/10/29 13:29

>接続元のポートを固定していませんか? >接続先と元のIPとポートまで固定されている場合、切断後すぐに接続できないケースがあったように思います。 接続先と元のIPとポートを固定している場合とは,サーバPCとクライアントPCでsockaddr_in構造体を作成して,IPアドレスとポートを設定すると思うのですが,設定してはいけないということでしょうか?
tmp

2018/10/30 03:52

A1:シミュレータ1 A2:シミュレータ2 B:クライアントPC兼サーバPC C:クライアントPC2 として、 A1とBがポート番号「11111」で接続をA1、B両方とも同じポート番号にしているのかと勘違いし、書きました。 ただ、読み直してみるとLISTENING状態のソケットはつながっていないのですから閉じればいいわけですし、突然SYN_SENTに変わるといわれても、ESTABLISHEDからSYN_SENTに遷移するとは、考えにくく、いまいち、状況がわかりません。netstatの結果さえもありませんし。 ネットワークの問題なのか別の問題かさえもわかりません。 詳しい状況説明をお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問