@@ -64,6 +64,14 @@ | |||||
</Link> | </Link> | ||||
</ItemDefinitionGroup> | </ItemDefinitionGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<ClCompile Include="common.cpp" /> | |||||
<ClCompile Include="main.cpp" /> | |||||
<ClCompile Include="TCP_client.cpp" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<ClInclude Include="common.h" /> | |||||
<ClInclude Include="main.h" /> | |||||
<ClInclude Include="TCP_client.h" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | ||||
<ImportGroup Label="ExtensionTargets"> | <ImportGroup Label="ExtensionTargets"> | ||||
@@ -14,4 +14,26 @@ | |||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> | <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> | ||||
</Filter> | </Filter> | ||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | |||||
<ClCompile Include="main.cpp"> | |||||
<Filter>源文件</Filter> | |||||
</ClCompile> | |||||
<ClCompile Include="common.cpp"> | |||||
<Filter>源文件</Filter> | |||||
</ClCompile> | |||||
<ClCompile Include="TCP_client.cpp"> | |||||
<Filter>源文件</Filter> | |||||
</ClCompile> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<ClInclude Include="common.h"> | |||||
<Filter>头文件</Filter> | |||||
</ClInclude> | |||||
<ClInclude Include="TCP_client.h"> | |||||
<Filter>头文件</Filter> | |||||
</ClInclude> | |||||
<ClInclude Include="main.h"> | |||||
<Filter>头文件</Filter> | |||||
</ClInclude> | |||||
</ItemGroup> | |||||
</Project> | </Project> |
@@ -0,0 +1,42 @@ | |||||
#include "TCP_client.h" | |||||
SOCKET Init_client(void) | |||||
{ | |||||
if (InitSocket_Version() == 0) | |||||
return INVALID_SOCKET; | |||||
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0); | |||||
sockaddr_in serversock_in; | |||||
serversock_in.sin_addr.S_un.S_addr = inet_addr("10.10.0.105"); | |||||
serversock_in.sin_family = AF_INET; | |||||
serversock_in.sin_port = htons(3000); | |||||
if (SOCKET_ERROR == connect(clientSocket, (SOCKADDR*)&serversock_in, sizeof(SOCKADDR))) | |||||
{ | |||||
cout << "连接从站失败" << endl; | |||||
return INVALID_SOCKET; | |||||
} | |||||
return clientSocket; | |||||
} | |||||
int Tcp_client(void) | |||||
{ | |||||
SOCKET clientSocket = Init_client(); | |||||
if (INVALID_SOCKET == clientSocket) | |||||
{ | |||||
cout << "初始化主站失败" << endl; | |||||
return 0; | |||||
} | |||||
while (true) | |||||
{ | |||||
char receiveBuf[100]; | |||||
memset(receiveBuf, 0, 100); | |||||
recv(clientSocket, receiveBuf, 100, 0); | |||||
printf("%s\n", receiveBuf); | |||||
send(clientSocket, "hello,this is client", strlen("hello,this is client") + 1, 0); | |||||
} | |||||
//关闭套接字 | |||||
closesocket(clientSocket); | |||||
//关闭服务 | |||||
WSACleanup(); | |||||
return 0; | |||||
} |
@@ -0,0 +1,8 @@ | |||||
#ifndef __TCP_CLIENT_H | |||||
#define __TCP_CLIENT_H | |||||
#include "common.h" | |||||
int Tcp_client(void); | |||||
#endif |
@@ -0,0 +1,52 @@ | |||||
#include "common.h" | |||||
bool InitSocket_Version(void) | |||||
{ | |||||
WORD sockVersion = MAKEWORD(2, 2);//使用winsocket2.2版本 | |||||
WSADATA wsaData; | |||||
if (WSAStartup(sockVersion, &wsaData) != 0) | |||||
{ | |||||
return false; | |||||
} | |||||
return true; | |||||
} | |||||
bool Check_IP(char* IP) | |||||
{ | |||||
int s[4]; | |||||
string ip = IP; | |||||
if (ip.length() < 7 || ip.length() > 15) //长度判定 | |||||
return false; | |||||
if (sscanf_s(IP, "%d.%d.%d.%d", &s[0], &s[1], &s[2], &s[3]) != 4) //IPV4格式正确 | |||||
{ | |||||
return false; | |||||
} | |||||
string newip = to_string(s[0]) + "." + to_string(s[1]) + "." + to_string(s[2]) + "." + to_string(s[3]); | |||||
if (ip != newip) //前导0 | |||||
return false; | |||||
if ((s[0] & 0xffffff00) || (s[1] & 0xffffff00) || (s[2] & 0xffffff00) || (s[3] & 0xffffff00)) //判断每一段大小是否符合要求 | |||||
{ | |||||
return false; | |||||
} | |||||
return true; | |||||
} | |||||
void Input_IP(vector <string>& a) | |||||
{ | |||||
cout << "请输入从站IP:" << endl; | |||||
char IP[100]; | |||||
while (cin >> IP) // ctrl + Z + Enter 结束输入 | |||||
{ | |||||
if (Check_IP(IP)) | |||||
{ | |||||
a.push_back(IP); | |||||
memset(IP, 0, 100); | |||||
} | |||||
else | |||||
{ | |||||
cout << "输入IP格式错误,请重新输入" << endl; | |||||
memset(IP, 0, 100); | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,17 @@ | |||||
#ifndef __COMMON_H | |||||
#define __COMMON_H | |||||
#include <stdio.h> | |||||
#include <winsock2.h> | |||||
#include <WS2tcpip.h> | |||||
#include <vector> | |||||
#include <string> | |||||
#include <iostream> | |||||
#pragma comment(lib,"ws2_32.lib") | |||||
using namespace std; | |||||
bool InitSocket_Version(void); | |||||
bool Check_IP(char* IP); | |||||
void Input_IP(vector <string>& a); | |||||
#endif |
@@ -0,0 +1,9 @@ | |||||
#include "main.h" | |||||
int main() | |||||
{ | |||||
getchar(); | |||||
return 0; | |||||
} |
@@ -0,0 +1,6 @@ | |||||
#ifndef __MAIN_H | |||||
#define __MAIN_H | |||||
#include "TCP_client.h" | |||||
#endif |
@@ -3,7 +3,19 @@ Microsoft Visual Studio Solution File, Format Version 12.00 | |||||
# Visual Studio 2013 | # Visual Studio 2013 | ||||
VisualStudioVersion = 12.0.30501.0 | VisualStudioVersion = 12.0.30501.0 | ||||
MinimumVisualStudioVersion = 10.0.40219.1 | MinimumVisualStudioVersion = 10.0.40219.1 | ||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Modbus_TCP", "Modbus_TCP\Modbus_TCP.vcxproj", "{CC08BE54-3DFF-41F2-9F8B-17E0FD5E3757}" | |||||
EndProject | |||||
Global | Global | ||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||||
Debug|Win32 = Debug|Win32 | |||||
Release|Win32 = Release|Win32 | |||||
EndGlobalSection | |||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution | |||||
{CC08BE54-3DFF-41F2-9F8B-17E0FD5E3757}.Debug|Win32.ActiveCfg = Debug|Win32 | |||||
{CC08BE54-3DFF-41F2-9F8B-17E0FD5E3757}.Debug|Win32.Build.0 = Debug|Win32 | |||||
{CC08BE54-3DFF-41F2-9F8B-17E0FD5E3757}.Release|Win32.ActiveCfg = Release|Win32 | |||||
{CC08BE54-3DFF-41F2-9F8B-17E0FD5E3757}.Release|Win32.Build.0 = Release|Win32 | |||||
EndGlobalSection | |||||
GlobalSection(SolutionProperties) = preSolution | GlobalSection(SolutionProperties) = preSolution | ||||
HideSolutionNode = FALSE | HideSolutionNode = FALSE | ||||
EndGlobalSection | EndGlobalSection | ||||