flySnail преди 4 години
родител
ревизия
d412c61c5d

+ 14 - 0
.idea/artifacts/electricEnergyV2_jar.xml

@@ -0,0 +1,14 @@
+<component name="ArtifactManager">
+  <artifact type="jar" name="electricEnergyV2:jar">
+    <output-path>$PROJECT_DIR$/out/artifacts/electricEnergyV2_jar</output-path>
+    <root id="archive" name="electricEnergyV2.jar">
+      <element id="module-output" name="electricEnergyV2" />
+      <element id="extracted-dir" path="H:/study/Json/JSONObject所必须的6个包/commons-beanutils-1.7.0.jar" path-in-jar="/" />
+      <element id="extracted-dir" path="H:/study/Json/JSONObject所必须的6个包/ezmorph-1.0.3.jar" path-in-jar="/" />
+      <element id="extracted-dir" path="H:/study/Json/JSONObject所必须的6个包/commons-logging.jar" path-in-jar="/" />
+      <element id="extracted-dir" path="H:/study/Json/JSONObject所必须的6个包/commons-lang-2.5.jar" path-in-jar="/" />
+      <element id="extracted-dir" path="H:/study/Json/JSONObject所必须的6个包/commons-collections-3.1.jar" path-in-jar="/" />
+      <element id="extracted-dir" path="H:/study/Json/JSONObject所必须的6个包/json-lib-2.1-jdk15.jar" path-in-jar="/" />
+    </root>
+  </artifact>
+</component>

+ 21 - 0
.idea/compiler.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <wildcardResourcePatterns>
+      <entry name="!?*.java" />
+      <entry name="!?*.form" />
+      <entry name="!?*.class" />
+      <entry name="!?*.groovy" />
+      <entry name="!?*.scala" />
+      <entry name="!?*.flex" />
+      <entry name="!?*.kt" />
+      <entry name="!?*.clj" />
+    </wildcardResourcePatterns>
+    <bytecodeTargetLevel target="8">
+      <module name="electricEnergyV2" target="8" />
+    </bytecodeTargetLevel>
+  </component>
+  <component name="JavacSettings">
+    <option name="ADDITIONAL_OPTIONS_STRING" value="-encoding utf-8" />
+  </component>
+</project>

+ 1 - 0
.idea/description.html

@@ -0,0 +1 @@
+<html>Simple <b>Java</b> application that includes a class with <code>main()</code> method</html>

+ 6 - 0
.idea/encodings.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8">
+    <file url="PROJECT" charset="UTF-8" />
+  </component>
+</project>

+ 12 - 0
.idea/misc.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="EntryPointsManager">
+    <entry_points version="2.0" />
+  </component>
+  <component name="ProjectKey">
+    <option name="state" value="project://63537948-39a4-48a0-9c97-34259a0fa913" />
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/electricEnergyV2.iml" filepath="$PROJECT_DIR$/electricEnergyV2.iml" />
+    </modules>
+  </component>
+</project>

+ 124 - 0
.idea/uiDesigner.xml

@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 776 - 0
.idea/workspace.xml

@@ -0,0 +1,776 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ArtifactsWorkspaceSettings">
+    <artifacts-to-build>
+      <artifact name="electricEnergyV2:jar" />
+    </artifacts-to-build>
+  </component>
+  <component name="ChangeListManager">
+    <list default="true" id="853de74d-d764-48df-9f5d-3bb92a346680" name="Default" comment="" />
+    <ignored path="$PROJECT_DIR$/out/" />
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+    <option name="TRACKING_ENABLED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="CoverageDataManager">
+    <SUITE FILE_PATH="coverage/electricEnergyV2$Main.ic" NAME="Main Coverage Results" MODIFIED="1631451856817" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="idea" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" />
+  </component>
+  <component name="FileEditorManager">
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
+      <file leaf-file-name="Main.java" pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/src/Main.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="54">
+              <caret line="8" selection-start-line="8" selection-end-line="26" selection-end-column="3" />
+              <folding>
+                <element signature="imports" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="electricEnergyV2.iml" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/electricEnergyV2.iml">
+          <provider selected="true" editor-type-id="text-editor" />
+        </entry>
+      </file>
+      <file leaf-file-name="MANIFEST.MF" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/META-INF/MANIFEST.MF">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="81">
+              <caret line="3" selection-start-line="3" selection-end-line="3" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="TCPClient.java" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/tcpunit/TCPClient.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="108">
+              <caret line="9" column="22" selection-start-line="9" selection-start-column="22" selection-end-line="9" selection-end-column="22" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="TCPServer.java" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/tcpunit/TCPServer.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="2079">
+              <caret line="94" column="48" selection-start-line="94" selection-start-column="48" selection-end-line="94" selection-end-column="48" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="JSONObject.class" pinned="false" current-in-tab="false">
+        <entry file="jar://H:/study/Json/JSONObject所必须的6个包/json-lib-2.1-jdk15.jar!/net/sf/json/JSONObject.class">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="25083">
+              <caret line="964" column="11" selection-start-line="964" selection-start-column="11" selection-end-line="964" selection-end-column="11" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="ElectricMsg.java" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/tcpunit/ElectricMsg.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="432">
+              <caret line="26" column="5" selection-start-line="26" selection-start-column="5" selection-end-line="26" selection-end-column="5" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="Payload.java" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/tcpunit/Payload.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="108">
+              <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="Parser.java" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/tcpunit/Parser.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="432">
+              <caret line="16" column="27" selection-start-line="16" selection-start-column="27" selection-end-line="16" selection-end-column="27" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="HttpClient.java" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/tcpunit/HttpClient.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="135">
+              <caret line="8" column="10" selection-start-line="8" selection-start-column="10" selection-end-line="8" selection-end-column="10" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="FileTemplateManagerImpl">
+    <option name="RECENT_TEMPLATES">
+      <list>
+        <option value="Class" />
+      </list>
+    </option>
+  </component>
+  <component name="IdeDocumentHistory">
+    <option name="CHANGED_PATHS">
+      <list>
+        <option value="$PROJECT_DIR$/src/tcp/Packet.java" />
+        <option value="$PROJECT_DIR$/src/tcp/Parser.java" />
+        <option value="$PROJECT_DIR$/src/ElectricMsg.java" />
+        <option value="$PROJECT_DIR$/src/tcp/ElectricMsg.java" />
+        <option value="$PROJECT_DIR$/src/tcp/TCPServer.java" />
+        <option value="$PROJECT_DIR$/src/tcp/HttpClient.java" />
+        <option value="$PROJECT_DIR$/src/tcpunit/TCPServer.java" />
+        <option value="$PROJECT_DIR$/src/Main.java" />
+      </list>
+    </option>
+  </component>
+  <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
+  <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
+  <component name="JsGulpfileManager">
+    <detection-done>true</detection-done>
+    <sorting>DEFINITION_ORDER</sorting>
+  </component>
+  <component name="MavenProjectNavigator">
+    <treeState>
+      <expand />
+      <select />
+    </treeState>
+  </component>
+  <component name="NodePackageJsonFileManager">
+    <packageJsonPaths />
+  </component>
+  <component name="ProjectFrameBounds">
+    <option name="x" value="-3714" />
+    <option name="y" value="34" />
+    <option name="width" value="1741" />
+    <option name="height" value="971" />
+  </component>
+  <component name="ProjectView">
+    <navigator proportions="" version="1">
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="Scope" />
+      <pane id="AndroidView" />
+      <pane id="ProjectPane">
+        <subPane>
+          <expand>
+            <path>
+              <item name="electricEnergyV2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="electricEnergyV2" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="electricEnergyV2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="electricEnergyV2" type="462c0819:PsiDirectoryNode" />
+              <item name="out" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="electricEnergyV2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="electricEnergyV2" type="462c0819:PsiDirectoryNode" />
+              <item name="out" type="462c0819:PsiDirectoryNode" />
+              <item name="artifacts" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="electricEnergyV2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="electricEnergyV2" type="462c0819:PsiDirectoryNode" />
+              <item name="out" type="462c0819:PsiDirectoryNode" />
+              <item name="artifacts" type="462c0819:PsiDirectoryNode" />
+              <item name="electricEnergyV2_jar" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="electricEnergyV2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="electricEnergyV2" type="462c0819:PsiDirectoryNode" />
+              <item name="out" type="462c0819:PsiDirectoryNode" />
+              <item name="production" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="electricEnergyV2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="electricEnergyV2" type="462c0819:PsiDirectoryNode" />
+              <item name="out" type="462c0819:PsiDirectoryNode" />
+              <item name="production" type="462c0819:PsiDirectoryNode" />
+              <item name="electricEnergyV2" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="electricEnergyV2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="electricEnergyV2" type="462c0819:PsiDirectoryNode" />
+              <item name="out" type="462c0819:PsiDirectoryNode" />
+              <item name="production" type="462c0819:PsiDirectoryNode" />
+              <item name="electricEnergyV2" type="462c0819:PsiDirectoryNode" />
+              <item name="META-INF" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="electricEnergyV2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="electricEnergyV2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="electricEnergyV2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="electricEnergyV2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="META-INF" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="electricEnergyV2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="electricEnergyV2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="tcpunit" type="462c0819:PsiDirectoryNode" />
+            </path>
+          </expand>
+          <select />
+        </subPane>
+      </pane>
+      <pane id="PackagesPane" />
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="aspect.path.notification.shown" value="true" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+    <property name="project.structure.last.edited" value="Project" />
+    <property name="project.structure.proportion" value="0.15" />
+    <property name="project.structure.side.proportion" value="0.2" />
+    <property name="settings.editor.selected.configurable" value="reference.projectsettings.compiler.javacompiler" />
+  </component>
+  <component name="RecentsManager">
+    <key name="CopyFile.RECENT_KEYS">
+      <recent name="D:\workspace\ideaWorkSpace\electricEnergyV2\src\tcp" />
+      <recent name="D:\workspace\ideaWorkSpace\electricEnergyV2\src" />
+    </key>
+  </component>
+  <component name="RunDashboard">
+    <option name="ruleStates">
+      <list>
+        <RuleState>
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
+        </RuleState>
+        <RuleState>
+          <option name="name" value="StatusDashboardGroupingRule" />
+        </RuleState>
+      </list>
+    </option>
+  </component>
+  <component name="RunManager">
+    <configuration name="Main" type="Application" factoryName="Application" temporary="true">
+      <option name="MAIN_CLASS_NAME" value="Main" />
+      <module name="electricEnergyV2" />
+      <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
+      <RunnerSettings RunnerId="Run" />
+      <ConfigurationWrapper RunnerId="Run" />
+    </configuration>
+    <recent_temporary>
+      <list>
+        <item itemvalue="Application.Main" />
+      </list>
+    </recent_temporary>
+  </component>
+  <component name="SvnConfiguration">
+    <configuration />
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="853de74d-d764-48df-9f5d-3bb92a346680" name="Default" comment="" />
+      <created>1631447029647</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1631447029647</updated>
+      <workItem from="1631447032304" duration="5521000" />
+      <workItem from="1631494312412" duration="2102000" />
+      <workItem from="1631529608411" duration="828000" />
+      <workItem from="1631580618551" duration="476000" />
+      <workItem from="1631581192426" duration="2896000" />
+      <workItem from="1631586202989" duration="5422000" />
+    </task>
+    <servers />
+  </component>
+  <component name="TimeTrackingManager">
+    <option name="totallyTimeSpent" value="17245000" />
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="-3714" y="34" width="1741" height="971" extended-state="0" />
+    <editor active="true" />
+    <layout>
+      <window_info anchor="right" id="Palette" order="3" />
+      <window_info anchor="bottom" id="TODO" order="6" />
+      <window_info anchor="bottom" id="Messages" order="7" />
+      <window_info anchor="right" id="Palette&#9;" order="3" />
+      <window_info id="Image Layers" order="2" />
+      <window_info anchor="right" id="Capture Analysis" order="3" />
+      <window_info anchor="bottom" id="Event Log" order="7" side_tool="true" />
+      <window_info anchor="right" id="Maven Projects" order="3" visible="true" weight="0.12637681" />
+      <window_info anchor="bottom" id="Database Changes" order="7" show_stripe_button="false" />
+      <window_info active="true" anchor="bottom" id="Run" order="2" visible="true" weight="0.38200936" />
+      <window_info anchor="bottom" id="Version Control" order="7" show_stripe_button="false" />
+      <window_info anchor="bottom" id="Terminal" order="7" />
+      <window_info id="Capture Tool" order="2" />
+      <window_info id="Designer" order="2" />
+      <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.13913043" />
+      <window_info anchor="right" id="Database" order="3" />
+      <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
+      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
+      <window_info id="UI Designer" order="2" />
+      <window_info anchor="right" id="Theme Preview" order="3" />
+      <window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
+      <window_info id="Favorites" order="2" side_tool="true" />
+      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
+      <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
+      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
+      <window_info anchor="bottom" id="Message" order="0" />
+      <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
+      <window_info anchor="bottom" id="Find" order="1" weight="0.32943678" />
+    </layout>
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="version" value="1" />
+  </component>
+  <component name="VcsContentAnnotationSettings">
+    <option name="myLimit" value="2678400000" />
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/Payload.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="108">
+          <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/Parser.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="432">
+          <caret line="16" column="27" selection-start-line="16" selection-start-column="27" selection-end-line="16" selection-end-column="27" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/HttpClient.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="135">
+          <caret line="8" column="10" selection-start-line="8" selection-start-column="10" selection-end-line="8" selection-end-column="10" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/Main.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1107">
+          <caret line="41" column="35" lean-forward="true" selection-start-line="41" selection-start-column="35" selection-end-line="41" selection-end-column="35" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/TCPClient.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="108">
+          <caret line="11" column="22" selection-start-line="11" selection-start-column="22" selection-end-line="11" selection-end-column="22" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/TCPServer.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="945">
+          <caret line="35" column="42" selection-start-line="35" selection-start-column="42" selection-end-line="35" selection-end-column="42" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://H:/study/Json/JSONObject所必须的6个包/json-lib-2.1-jdk15.jar!/net/sf/json/JSONObject.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="26028">
+          <caret line="964" column="11" selection-start-line="964" selection-start-column="11" selection-end-line="964" selection-end-column="11" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/ElectricMsg.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="432">
+          <caret line="26" column="5" selection-start-line="26" selection-start-column="5" selection-end-line="26" selection-end-column="5" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://D:/software/Android/jdk1_8/src.zip!/java/io/InputStream.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1107">
+          <caret line="64" column="24" selection-start-line="64" selection-start-column="24" selection-end-line="64" selection-end-column="24" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/Payload.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="108">
+          <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/Parser.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="432">
+          <caret line="16" column="27" selection-start-line="16" selection-start-column="27" selection-end-line="16" selection-end-column="27" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/HttpClient.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="135">
+          <caret line="8" column="10" selection-start-line="8" selection-start-column="10" selection-end-line="8" selection-end-column="10" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/Main.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1323">
+          <caret line="49" column="22" selection-start-line="49" selection-start-column="22" selection-end-line="49" selection-end-column="22" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/TCPClient.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="108">
+          <caret line="11" column="22" selection-start-line="11" selection-start-column="22" selection-end-line="11" selection-end-column="22" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/TCPServer.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="621">
+          <caret line="35" column="42" selection-start-line="35" selection-start-column="42" selection-end-line="35" selection-end-column="42" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://H:/study/Json/JSONObject所必须的6个包/json-lib-2.1-jdk15.jar!/net/sf/json/JSONObject.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="26028">
+          <caret line="964" column="11" selection-start-line="964" selection-start-column="11" selection-end-line="964" selection-end-column="11" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/ElectricMsg.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="432">
+          <caret line="26" column="5" selection-start-line="26" selection-start-column="5" selection-end-line="26" selection-end-column="5" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://D:/software/Android/jdk1_8/src.zip!/java/io/InputStream.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1107">
+          <caret line="64" column="24" selection-start-line="64" selection-start-column="24" selection-end-line="64" selection-end-column="24" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/Payload.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="108">
+          <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/Parser.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="432">
+          <caret line="16" column="27" selection-start-line="16" selection-start-column="27" selection-end-line="16" selection-end-column="27" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/HttpClient.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="135">
+          <caret line="8" column="10" selection-start-line="8" selection-start-column="10" selection-end-line="8" selection-end-column="10" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/Main.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="351">
+          <caret line="13" column="23" lean-forward="true" selection-start-line="13" selection-start-column="23" selection-end-line="13" selection-end-column="23" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/TCPClient.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="297">
+          <caret line="11" column="22" selection-start-line="11" selection-start-column="22" selection-end-line="11" selection-end-column="22" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/TCPServer.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="621">
+          <caret line="35" column="42" selection-start-line="35" selection-start-column="42" selection-end-line="35" selection-end-column="42" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://H:/study/Json/JSONObject所必须的6个包/json-lib-2.1-jdk15.jar!/net/sf/json/JSONObject.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="26028">
+          <caret line="964" column="11" selection-start-line="964" selection-start-column="11" selection-end-line="964" selection-end-column="11" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/ElectricMsg.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="432">
+          <caret line="26" column="5" selection-start-line="26" selection-start-column="5" selection-end-line="26" selection-end-column="5" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://D:/software/Android/jdk1_8/src.zip!/java/io/InputStream.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1107">
+          <caret line="64" column="24" selection-start-line="64" selection-start-column="24" selection-end-line="64" selection-end-column="24" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/Payload.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="108">
+          <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/Parser.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="432">
+          <caret line="16" column="27" selection-start-line="16" selection-start-column="27" selection-end-line="16" selection-end-column="27" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/HttpClient.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="135">
+          <caret line="8" column="10" selection-start-line="8" selection-start-column="10" selection-end-line="8" selection-end-column="10" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/Main.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="459">
+          <caret line="17" column="42" selection-start-line="17" selection-start-column="38" selection-end-line="17" selection-end-column="42" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/TCPClient.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="108">
+          <caret line="11" column="22" selection-start-line="11" selection-start-column="22" selection-end-line="11" selection-end-column="22" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/TCPServer.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="621">
+          <caret line="35" column="42" selection-start-line="35" selection-start-column="42" selection-end-line="35" selection-end-column="42" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://H:/study/Json/JSONObject所必须的6个包/json-lib-2.1-jdk15.jar!/net/sf/json/JSONObject.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="26028">
+          <caret line="964" column="11" selection-start-line="964" selection-start-column="11" selection-end-line="964" selection-end-column="11" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/ElectricMsg.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="432">
+          <caret line="26" column="5" lean-forward="true" selection-start-line="26" selection-start-column="5" selection-end-line="26" selection-end-column="5" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://D:/software/Android/jdk1_8/src.zip!/java/io/InputStream.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1107">
+          <caret line="64" column="24" selection-start-line="64" selection-start-column="24" selection-end-line="64" selection-end-column="24" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/Payload.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="108">
+          <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/Parser.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="432">
+          <caret line="16" column="27" selection-start-line="16" selection-start-column="27" selection-end-line="16" selection-end-column="27" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/HttpClient.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="135">
+          <caret line="8" column="10" selection-start-line="8" selection-start-column="10" selection-end-line="8" selection-end-column="10" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcp/Packet.java" />
+    <entry file="jar://D:/software/Android/jdk1_8/src.zip!/java/io/InputStream.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1107">
+          <caret line="64" column="24" selection-start-line="64" selection-start-column="24" selection-end-line="64" selection-end-column="24" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/Payload.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="108">
+          <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/Parser.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="432">
+          <caret line="16" column="27" selection-start-line="16" selection-start-column="27" selection-end-line="16" selection-end-column="27" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://H:/study/Json/JSONObject所必须的6个包/json-lib-2.1-jdk15.jar!/net/sf/json/JSONObject.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="25083">
+          <caret line="964" column="11" selection-start-line="964" selection-start-column="11" selection-end-line="964" selection-end-column="11" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/TCPClient.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="108">
+          <caret line="9" column="22" selection-start-line="9" selection-start-column="22" selection-end-line="9" selection-end-column="22" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/HttpClient.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="135">
+          <caret line="8" column="10" selection-start-line="8" selection-start-column="10" selection-end-line="8" selection-end-column="10" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/ElectricMsg.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="432">
+          <caret line="26" column="5" selection-start-line="26" selection-start-column="5" selection-end-line="26" selection-end-column="5" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/electricEnergyV2.iml">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/META-INF/MANIFEST.MF">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="81">
+          <caret line="3" selection-start-line="3" selection-end-line="3" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/tcpunit/TCPServer.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="2079">
+          <caret line="94" column="48" selection-start-line="94" selection-start-column="48" selection-end-line="94" selection-end-column="48" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/Main.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="54">
+          <caret line="8" selection-start-line="8" selection-end-line="26" selection-end-column="3" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+  </component>
+  <component name="masterDetails">
+    <states>
+      <state key="ArtifactsStructureConfigurable.UI">
+        <settings>
+          <artifact-editor />
+          <last-edited>electricEnergyV2:jar</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+                <option value="0.5" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="FacetStructureConfigurable.UI">
+        <settings>
+          <last-edited>No facets are configured</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="GlobalLibrariesConfigurable.UI">
+        <settings>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="JdkListConfigurable.UI">
+        <settings>
+          <last-edited>1.8</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="ModuleStructureConfigurable.UI">
+        <settings>
+          <last-edited>electricEnergyV2</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="ProjectLibrariesConfigurable.UI">
+        <settings>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+    </states>
+  </component>
+</project>

+ 65 - 0
electricEnergyV2.iml

@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://H:/study/Json/JSONObject所必须的6个包/commons-beanutils-1.7.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://H:/study/Json/JSONObject所必须的6个包/commons-collections-3.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://H:/study/Json/JSONObject所必须的6个包/commons-lang-2.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://H:/study/Json/JSONObject所必须的6个包/commons-logging.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://H:/study/Json/JSONObject所必须的6个包/ezmorph-1.0.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://H:/study/Json/JSONObject所必须的6个包/json-lib-2.1-jdk15.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+  </component>
+</module>

+ 3 - 0
out/production/electricEnergyV2/META-INF/MANIFEST.MF

@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Main-Class: Main
+

+ 3 - 0
src/META-INF/MANIFEST.MF

@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Main-Class: Main
+

+ 91 - 0
src/Main.java

@@ -0,0 +1,91 @@
+import net.sf.json.JSONObject;
+import tcpunit.HttpClient;
+import tcpunit.TCPServer;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Set;
+
+/**
+ * "buildCode": "xz01",
+ * "buildName": "行政楼",
+ *
+ * "buildCode": "kj01",
+ * "buildName": "科技楼",
+ *
+ * "buildCode": "hdzx01",
+ * "buildName": "大学生活动中心",
+ *
+ * "buildCode": "st01",
+ * "buildName": "第一食堂",
+ *
+ * "buildCode": "xz02",
+ * "buildName": "系办楼",
+ *
+ * "buildCode": "tw01",
+ * "buildName": "图文中心",
+ */
+public class Main {
+    static TCPServer tcpServer;
+    private static HttpClient httpClient;
+
+    public static void main(String[] args) {
+        httpClient = new HttpClient();
+        // 电能
+        while (true) {
+            tcpServer = new TCPServer(7001);
+            tcpServer.setOnRequestListener(new TCPServer.OnRequestListener() {
+                @Override
+                public String onRequestListener(String request) {
+                    //System.out.println("收到的客户端请求:  " + request);
+                    return request;
+                }
+            });
+
+            tcpServer.setOnResponseListener(new TCPServer.OnResponseListener() {
+                @Override
+                public String onResponseListener(String response) {
+                    JSONObject object = JSONObject.fromObject(response);
+                    //System.out.println("数据:"+object.getString("pointCode") + object.getString("pointName") + object.getDouble("energy"));
+                    String HTTP_URL = "http://192.168.161.230:9999/api/energy/energyDataUpload";
+                    httpClient.doPost(HTTP_URL,upLoadData(object.getString("pointCode") , object.getDouble("energy")));
+
+                    return response;
+                }
+            });
+            tcpServer.setOnSocketChange(new TCPServer.OnSocketChange() {
+                @Override
+                public void onSocketChange(Set<String> devs) {
+                    //System.out.print("在线客户端列表:  ");
+                    for (String dev : devs) {
+                        System.out.print(dev + "    ");
+                    }
+                    System.out.println();
+                }
+            });
+            tcpServer.start();
+            System.out.println("server start...");
+            tcpServer.waitServerStop();
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            System.out.println("Service is abnormal, is restarting....");  // 服务器异常,正在重启
+        }
+    }
+
+    /**
+     * 组合Json
+     * @param code
+     * @param currentAggr
+     * @return
+     */
+    private static String upLoadData(String code, Double currentAggr) {
+        Date dNow = new Date( );
+        SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
+        String dataStr = "{\"buildCode\":\""+code+"\",\"currentAggr\":\""+String.valueOf(currentAggr)+"\",\"energyType\":1,\"updateTime\":\""+ft.format(dNow)+"\"}";
+        System.out.println(dataStr);
+        return dataStr;
+    }
+}

+ 32 - 0
src/tcpunit/ElectricMsg.java

@@ -0,0 +1,32 @@
+package tcpunit;
+
+public class ElectricMsg {
+
+    private String pointCode;
+    private String pointName;
+    private Double energy;
+
+    public String getPointCode() {
+        return pointCode;
+    }
+
+    public void setPointCode(String pointCode) {
+        this.pointCode = pointCode;
+    }
+
+    public String getPointName() {
+        return pointName;
+    }
+
+    public void setPointName(String pointName) {
+        this.pointName = pointName;
+    }
+
+    public Double getEnergy() {
+        return energy;
+    }
+
+    public void setEnergy(Double energy) {
+        this.energy = energy;
+    }
+}

+ 87 - 0
src/tcpunit/HttpClient.java

@@ -0,0 +1,87 @@
+package tcpunit;
+
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+public class HttpClient {
+    public String doPost(String httpUrl, String param) {
+
+        HttpURLConnection connection = null;
+        InputStream is = null;
+        OutputStream os = null;
+        BufferedReader br = null;
+        String result = null;
+        try {
+            URL url = new URL(httpUrl);
+            // 通过远程url连接对象打开连接
+            connection = (HttpURLConnection) url.openConnection();
+            // 设置连接请求方式
+            connection.setRequestMethod("POST");
+            // 设置连接主机服务器超时时间:15000毫秒
+            connection.setConnectTimeout(15000);
+            // 设置读取主机服务器返回数据超时时间:60000毫秒
+            connection.setReadTimeout(60000);
+
+            // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true
+            connection.setDoOutput(true);
+            // 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无
+            connection.setDoInput(true);
+            // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。
+            connection.setRequestProperty("Content-Type", "application/json");
+            // 设置鉴权信息:Authorization: Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0
+            //connection.setRequestProperty("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");
+            // 通过连接对象获取一个输出流
+            os = connection.getOutputStream();
+            // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的
+            os.write(param.getBytes());
+            // 通过连接对象获取一个输入流,向远程读取
+            if (connection.getResponseCode() == 200) {
+
+                is = connection.getInputStream();
+                // 对输入流对象进行包装:charset根据工作项目组的要求来设置
+                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
+
+                StringBuffer sbf = new StringBuffer();
+                String temp = null;
+                // 循环遍历一行一行读取数据
+                while ((temp = br.readLine()) != null) {
+                    sbf.append(temp);
+                    sbf.append("\r\n");
+                }
+                result = sbf.toString();
+            }
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            // 关闭资源
+            if (null != br) {
+                try {
+                    br.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != os) {
+                try {
+                    os.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != is) {
+                try {
+                    is.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            // 断开与远程地址url的连接
+            connection.disconnect();
+        }
+        return result;
+    }
+}

+ 26 - 0
src/tcpunit/Parser.java

@@ -0,0 +1,26 @@
+package tcpunit;
+
+public class Parser {
+    public static final byte MESSAGE_STX = '{';
+    public static final byte MESSAGE_END = '}';
+
+    private String jsonPacket="";
+    private Boolean isStart = false;
+
+    public String message_parse_char(char b) {
+        if (b == MESSAGE_STX && isStart==false) {
+            jsonPacket = "{";
+            isStart = true;
+        }
+        else if (b == MESSAGE_END && isStart==true) {
+            jsonPacket = jsonPacket+ "}";
+            isStart = false;
+            return jsonPacket;
+        }
+        else
+        {
+            jsonPacket = jsonPacket + b;
+        }
+        return null;
+    }
+}

+ 198 - 0
src/tcpunit/Payload.java

@@ -0,0 +1,198 @@
+package tcpunit;
+
+import java.nio.ByteBuffer;
+
+public class Payload {
+
+    private static final byte UNSIGNED_BYTE_MIN_VALUE = 0;
+    private static final short UNSIGNED_BYTE_MAX_VALUE = Byte.MAX_VALUE - Byte.MIN_VALUE;
+
+    private static final short UNSIGNED_SHORT_MIN_VALUE = 0;
+    private static final int UNSIGNED_SHORT_MAX_VALUE = Short.MAX_VALUE - Short.MIN_VALUE;
+
+    private static final int UNSIGNED_INT_MIN_VALUE = 0;
+    private static final long UNSIGNED_INT_MAX_VALUE = (long) Integer.MAX_VALUE - Integer.MIN_VALUE;
+
+    private static final long UNSIGNED_LONG_MIN_VALUE = 0;
+
+    public static final int MAX_PAYLOAD_SIZE = 200;
+
+    public final ByteBuffer payload;
+
+    public int index;
+
+    public Payload(int payloadSize) {
+        if (payloadSize > MAX_PAYLOAD_SIZE) {
+            payload = ByteBuffer.allocate(MAX_PAYLOAD_SIZE);
+        } else {
+            payload = ByteBuffer.allocate(payloadSize);
+
+        }
+    }
+
+    public ByteBuffer getData() {
+        return payload;
+    }
+
+    public int size() {
+        return payload.position();
+    }
+
+    public void add(byte c) {
+        payload.put(c);
+    }
+
+    public void resetIndex() {
+        index = 0;
+    }
+
+    public byte getByte() {
+        byte result = 0;
+        result |= (payload.get(index + 0) & 0xFF);
+        index += 1;
+        return result;
+    }
+
+    public short getUnsignedByte() {
+        short result = 0;
+        result |= payload.get(index + 0) & 0xFF;
+        index += 1;
+        return result;
+    }
+
+    public short getShort() {
+        short result = 0;
+        result |= (payload.get(index + 1) & 0xFF) << 8;
+        result |= (payload.get(index + 0) & 0xFF);
+        index += 2;
+        return result;
+    }
+
+    public int getUnsignedShort() {
+        int result = 0;
+        result |= (payload.get(index + 1) & 0xFF) << 8;
+        result |= (payload.get(index + 0) & 0xFF);
+        index += 2;
+        return result;
+    }
+
+    public int getInt() {
+        int result = 0;
+        result |= (payload.get(index + 3) & 0xFF) << 24;
+        result |= (payload.get(index + 2) & 0xFF) << 16;
+        result |= (payload.get(index + 1) & 0xFF) << 8;
+        result |= (payload.get(index + 0) & 0xFF);
+        index += 4;
+        return result;
+    }
+
+    public long getUnsignedInt() {
+        long result = 0;
+        result |= (payload.get(index + 3) & 0xFFL) << 24;
+        result |= (payload.get(index + 2) & 0xFFL) << 16;
+        result |= (payload.get(index + 1) & 0xFFL) << 8;
+        result |= (payload.get(index + 0) & 0xFFL);
+        index += 4;
+        return result;
+    }
+
+    public long getLong() {
+        long result = 0;
+        result |= (payload.get(index + 7) & 0xFFL) << 56;
+        result |= (payload.get(index + 6) & 0xFFL) << 48;
+        result |= (payload.get(index + 5) & 0xFFL) << 40;
+        result |= (payload.get(index + 4) & 0xFFL) << 32;
+        result |= (payload.get(index + 3) & 0xFFL) << 24;
+        result |= (payload.get(index + 2) & 0xFFL) << 16;
+        result |= (payload.get(index + 1) & 0xFFL) << 8;
+        result |= (payload.get(index + 0) & 0xFFL);
+        index += 8;
+        return result;
+    }
+
+    public long getUnsignedLong() {
+        return getLong();
+    }
+
+    public long getLongReverse() {
+        long result = 0;
+        result |= (payload.get(index + 0) & 0xFFL) << 56;
+        result |= (payload.get(index + 1) & 0xFFL) << 48;
+        result |= (payload.get(index + 2) & 0xFFL) << 40;
+        result |= (payload.get(index + 3) & 0xFFL) << 32;
+        result |= (payload.get(index + 4) & 0xFFL) << 24;
+        result |= (payload.get(index + 5) & 0xFFL) << 16;
+        result |= (payload.get(index + 6) & 0xFFL) << 8;
+        result |= (payload.get(index + 7) & 0xFFL);
+        index += 8;
+        return result;
+    }
+
+    public float getFloat() {
+        return Float.intBitsToFloat(getInt());
+    }
+
+    public void putByte(byte data) {
+        add(data);
+    }
+
+    public void putUnsignedByte(short data) {
+        if (data < UNSIGNED_BYTE_MIN_VALUE || data > UNSIGNED_BYTE_MAX_VALUE) {
+            throw new IllegalArgumentException("Value is outside of the range of an unsigned byte: " + data);
+        }
+
+        putByte((byte) data);
+    }
+
+    public void putShort(short data) {
+        add((byte) (data >> 0));
+        add((byte) (data >> 8));
+    }
+
+    public void putUnsignedShort(int data) {
+        if (data < UNSIGNED_SHORT_MIN_VALUE || data > UNSIGNED_SHORT_MAX_VALUE) {
+            throw new IllegalArgumentException("Value is outside of the range of an unsigned short: " + data);
+        }
+
+        putShort((short) data);
+    }
+
+    public void putInt(int data) {
+        add((byte) (data >> 0));
+        add((byte) (data >> 8));
+        add((byte) (data >> 16));
+        add((byte) (data >> 24));
+    }
+
+    public void putUnsignedInt(long data) {
+        if (data < UNSIGNED_INT_MIN_VALUE || data > UNSIGNED_INT_MAX_VALUE) {
+            throw new IllegalArgumentException("Value is outside of the range of an unsigned int: " + data);
+        }
+
+        putInt((int) data);
+    }
+
+    public void putLong(long data) {
+        add((byte) (data >> 0));
+        add((byte) (data >> 8));
+        add((byte) (data >> 16));
+        add((byte) (data >> 24));
+        add((byte) (data >> 32));
+        add((byte) (data >> 40));
+        add((byte) (data >> 48));
+        add((byte) (data >> 56));
+    }
+
+    public void putUnsignedLong(long data) {
+        if (data < UNSIGNED_LONG_MIN_VALUE) {
+            throw new IllegalArgumentException("Value is outside of the range of an unsigned long: " + data);
+        }
+
+        putLong(data);
+    }
+
+    public void putFloat(float data) {
+        putInt(Float.floatToIntBits(data));
+    }
+
+}

+ 145 - 0
src/tcpunit/TCPClient.java

@@ -0,0 +1,145 @@
+package tcpunit;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.SocketAddress;
+
+public abstract class TCPClient {
+
+    private String ip;
+    private int port;
+
+    private Socket mSocket;
+    private SocketAddress mSocketAddress;
+    private OutputStream mOutputStream;
+    private InputStream mInputStream;
+    private ReadThread mReadThread;
+    private boolean _isConnected = false;
+
+
+    public TCPClient(String ip, int port) {
+        this.ip = ip;
+        this.port = port;
+    }
+
+
+    public void connect() {
+        try {
+            this.mSocket = new Socket();
+            this.mSocket.setKeepAlive(true);
+            this.mSocketAddress = new InetSocketAddress(ip, port);
+            this.mSocket.connect( mSocketAddress, 3000);// 设置连接超时时间为3秒
+
+            this.mOutputStream = mSocket.getOutputStream();
+            this.mInputStream = mSocket.getInputStream();
+
+            this.mReadThread = new ReadThread();
+            this.mReadThread.start();
+            this._isConnected = true;
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public void close() {
+
+        if (this.mReadThread != null) {
+            this.mReadThread.interrupt();
+        }
+        if (this.mSocket != null) {
+            try {
+                this.mSocket.close();
+                this.mSocket = null;
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        this._isConnected = false;
+    }
+
+    public boolean isConnected() {
+        return this._isConnected;
+    }
+
+
+    public void send(byte[] bOutArray) {
+        try {
+            this.mOutputStream.write(bOutArray);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    protected abstract void onDataReceive(byte[] bytes, int size);
+
+    private class ReadThread extends Thread {
+        @Override
+        public void run() {
+            super.run();
+            while (!isInterrupted()) {
+                try {
+                    if (TCPClient.this.mInputStream == null) {
+                        return;
+                    }
+                    int available = TCPClient.this.mInputStream.available();
+                    if (available > 0) {
+                        byte[] buffer = new byte[available];
+                        int size = TCPClient.this.mInputStream.read(buffer);
+                        if (size > 0) {
+                            onDataReceive(buffer, size);
+                        }
+                    } else {
+                        Thread.sleep(50);
+                    }
+
+
+                } catch (Throwable e) {
+                    System.out.println(e.getMessage());
+                    return;
+                }
+            }
+        }
+    }
+}
+
+//// TCP 通信
+//        tcpClient = new TCPClient("192.168.0.110", 10000) {
+//@Override
+//protected void onDataReceive(byte[] bytes, int size) {
+////                String content = "TCPServer say :" + new String(bytes, 0, size);
+//        }
+//        };
+//        tcpClient.connect();//连接TCPServe
+//        if (tcpClient.isConnected()) {
+//        tcpClient.send(upLoadData(1,2,3,4,5,6));
+//        }
+    /**
+     * 封装成http
+     * @param temperature
+     * @param humidity
+     * @param negaticeO2Ion
+     * @param pm25
+     * @param pm10
+     * @param db
+     * @return
+     */
+//    private static byte[] upLoadData(float temperature, float humidity, float negaticeO2Ion, float pm25, float pm10, float db) {
+//        Date dNow = new Date( );
+//        SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
+//        String dataStr = "{\"temperature\":"+String.format("%.1f",temperature)+",\"humidity\":"+String.format("%.1f",humidity)+",\"negaticeO2Ion\":"+String.format("%.1f",negaticeO2Ion)+",\"pm25\":"+String.format("%.1f",pm25)+",\"pm10\":"+String.format("%.1f",pm10)+",\"db\":"+String.format("%.1f",db)+",\"collect_time\":"+ft.format(dNow)+"}";
+//        //发送数据
+//        String upToHttpContent = "POST /api/environment/id/recordUpload HTTP/1.1\n" +
+//                "Content-Type: text/plain\n" +
+//                "User-Agent: PostmanRuntime/7.28.1\n" +
+//                "Accept: */*\n" +
+//                "Postman-Token: bb1e2ba7-673e-4917-b84a-705e85a94b6f\n" +
+//                "Host: "+HTTP_SERVER+"\n" +
+//                "Accept-Encoding: gzip, deflate, br\n" +
+//                "Connection: keep-alive\n" +
+//                "Content-Length: "+dataStr.length()+"\n" +
+//                "\n" +dataStr;
+//        return upToHttpContent.getBytes();
+//    }

+ 243 - 0
src/tcpunit/TCPServer.java

@@ -0,0 +1,243 @@
+package tcpunit;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.net.InetSocketAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.HashMap;
+import java.util.Set;
+
+public class TCPServer {
+
+    private final String hostAddress; // 服务器地址
+    private final int myPort; // 服务器端口号
+    private ServerSocket myServerSocket; // 服务器ServerSocket
+    private Thread myThread; // 服务器线程
+    private OnRequestListener requestListener; // 数据请求监听器
+    private OnResponseListener responseListener; // 数据响应监听
+    private OnSocketChange socketChangeListener; // 客户端状态改变监听器
+    private ClientRunner clientRunner; // 客户端处理线程
+
+    private Parser parser = new Parser();
+    private HashMap<Integer, Socket> clients = new HashMap<>(); // 在线客户端列表<客户端编号,客户端对象>
+
+    public TCPServer(int port) {
+        this(null, port);
+    }
+
+    public TCPServer(String hostAddress, int port) {
+        this.hostAddress = hostAddress;
+        this.myPort = port;
+        clientRunner = new ClientRunner();
+    }
+
+    /**
+     * 安全关闭ServerSocket
+     *
+     * @param serverSocket
+     */
+    private static final void safeClose(ServerSocket serverSocket) {
+        if (serverSocket != null) {
+            try {
+                serverSocket.close();
+            } catch (IOException e) {
+            }
+        }
+    }
+
+    /**
+     * 安全关闭Socket
+     *
+     * @param socket
+     */
+    private static final void safeClose(Socket socket) {
+        if (socket != null) {
+            try {
+                socket.close();
+            } catch (IOException e) {
+            }
+        }
+    }
+
+    /**
+     * 安全关闭BufferedReader
+     *
+     * @param is
+     */
+    private static void safeClose(InputStream is) {
+        if (is != null) {
+            try {
+                is.close();
+            } catch (IOException ignored) {
+            }
+        }
+    }
+
+    /**
+     * 安全关闭PrintWriter
+     *
+     * @param writer
+     */
+    private static final void safeClose(PrintWriter writer) {
+        writer.close();
+    }
+
+    /**
+     * 开始TCP服务
+     */
+    public void start() {
+        try {
+            myServerSocket = new ServerSocket();
+            myServerSocket.bind((hostAddress != null) ? new InetSocketAddress(hostAddress, myPort) : new InetSocketAddress(myPort));
+        } catch (IOException e) {
+            System.out.println("Port is occupied");
+        }
+
+        myThread = new Thread(new Runnable() {
+            int disConnectCount=0;
+            char resData;
+
+            @Override
+            public void run() {
+                do try {
+                    final Socket finalAccept = myServerSocket.accept(); // 监听客户端连接
+                    clientRunner.exec(() -> {
+                        InputStream inputStream = null;
+                        try {
+                            inputStream = finalAccept.getInputStream();
+                            String packet = null;
+                            disConnectCount = 0;
+                            while (!finalAccept.isClosed()) {
+                                do {
+                                    resData = (char) inputStream.read();
+                                    if (resData == 65535) {
+                                        disConnectCount++;
+                                        if (disConnectCount > 3) {
+                                            System.out.println("Connection is disconnected");
+                                            throw new IOException();
+                                        }
+                                    } else {
+                                        disConnectCount = 0;
+                                    }
+                                    packet = parser.message_parse_char(resData);
+                                } while (packet == null);
+                                responseListener.onResponseListener(packet);
+                                //System.out.println(packet);
+                            }
+                        } catch (IOException e) {
+                            e.printStackTrace();
+                            System.out.println("Device offline");
+                            safeClose(inputStream);
+                            safeClose(finalAccept);
+                            removeSocket(clientRunner.id);
+                        }
+                    });
+                } catch (IOException e) {
+                    e.printStackTrace();
+                } while (!myServerSocket.isClosed());
+            }
+        });
+        myThread.setDaemon(true);
+        myThread.setName("TcpServer Main Listener");
+        myThread.start();
+    }
+
+    private boolean isConnected(Socket socket) {
+        try {
+            socket.sendUrgentData(0xff);
+            return true;
+        } catch (IOException e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    private synchronized void removeSocket(int id) {
+        clients.remove(id);
+    }
+
+
+    /**
+     * 停止TCP服务
+     */
+    public void stop() {
+        try {
+            safeClose(myServerSocket);
+            if (myThread != null) {
+                myThread.join();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 监听服务异常结束
+     */
+    public void waitServerStop() {
+        try {
+            myThread.join();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 客户端处理线程
+     */
+    public static class ClientRunner {
+        private long requestCount;
+        public int id;
+
+        public void exec(Runnable code) {
+            ++requestCount;
+            Thread t = new Thread(code);
+            t.setDaemon(true);
+            t.setName("TcpServer thread (#" + requestCount + ")");
+            t.start();
+        }
+    }
+
+    /**
+     * 监听客户端请求,并可以修改请求内容
+     */
+    public interface OnRequestListener {
+        String onRequestListener(String request);
+    }
+
+    /**
+     * 设置客户端请求监听器
+     *
+     * @param listener
+     */
+    public void setOnRequestListener(OnRequestListener listener) {
+        this.requestListener = listener;
+    }
+
+    /**
+     * 监听网关响应数据,并可以修改请求内容
+     */
+    public interface OnResponseListener {
+        String onResponseListener(String response);
+    }
+
+    /**
+     * 设置网关响应监听器
+     *
+     * @param listener
+     */
+    public void setOnResponseListener(OnResponseListener listener) {
+        this.responseListener = listener;
+    }
+
+    public interface OnSocketChange {
+        void onSocketChange(Set<String> hostAddress);
+    }
+
+    public void setOnSocketChange(OnSocketChange listener) {
+        this.socketChangeListener = listener;
+    }
+
+}