Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过套接字将数据发送到SQL Server_Sql_Sockets - Fatal编程技术网

通过套接字将数据发送到SQL Server

通过套接字将数据发送到SQL Server,sql,sockets,Sql,Sockets,几天来,我一直试图通过套接字连接到我的SQL Server。我找不出有什么问题 我认为我的sql server设置正确,我可以从服务器管理器或Visual Studio使用与套接字中使用的相同的连接信息连接到它。 除了插座,它每次都能工作。套接字可以连接,但当它向服务器发送字符串时,SQL server日志会告诉我: “网络数据包负载中指定的长度与读取的字节数不匹配;连接已关闭 错误:17836,严重程度20,状态17“ 这是我使用的套接字代码。它来自Microsoft Socket服务器/客户

几天来,我一直试图通过套接字连接到我的SQL Server。我找不出有什么问题

我认为我的sql server设置正确,我可以从服务器管理器或Visual Studio使用与套接字中使用的相同的连接信息连接到它。 除了插座,它每次都能工作。套接字可以连接,但当它向服务器发送字符串时,SQL server日志会告诉我: “网络数据包负载中指定的长度与读取的字节数不匹配;连接已关闭 错误:17836,严重程度20,状态17“

这是我使用的套接字代码。它来自Microsoft Socket服务器/客户端示例:

#include "stdafx.h"

#include "ClientMFC.h"

#define WIN32_LEAN_AND_MEAN

#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>


// Need to link with Ws2_32.lib, Mswsock.lib, and Advapi32.lib
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")



using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int nRetCode = 0;

    HMODULE hModule = ::GetModuleHandle(NULL);

    if (hModule != NULL)
    {
        // initialize MFC and print and error on failure
        if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))
        {
            // TODO: change error code to suit your needs
            _tprintf(_T("Fatal Error: MFC initialization failed\n"));
            nRetCode = 1;
        }
        else
        {
            // TODO: code your application's behavior here.
        }
    }
    else
    {
        // TODO: change error code to suit your needs
        _tprintf(_T("Fatal Error: GetModuleHandle failed\n"));
        nRetCode = 1;
    }
    //WSADATA is a struct that is filled up by the call 
    //to WSAStartup
    WSADATA wsaData;


    //WSAStartup initializes the program for calling WinSock.
    //The first parameter specifies the highest version of the 
    //WinSock specification, the program is allowed to use.
    int wsaret=WSAStartup(0x101,&wsaData);

    //WSAStartup returns zero on success.
    //If it fails we exit.
    if(wsaret!=0)
    {
        return 0;
    }

    SOCKET ConnectSocket = INVALID_SOCKET;

    struct sockaddr_in dest_addr;   // will hold the destination addr  

    dest_addr.sin_family = AF_INET;          // host byte order
    dest_addr.sin_port = htons(2433);   // short, network byte order
    dest_addr.sin_addr.s_addr = inet_addr("10.100.17.114");
    memset(&(dest_addr.sin_zero), '\0', 8);  // zero the rest of the struct
    ConnectSocket = socket(AF_INET, SOCK_STREAM, 0); // do some error checking!


   // Connect to server.
    int iResult = connect( ConnectSocket, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr));
    if (iResult == SOCKET_ERROR) {
        closesocket(ConnectSocket);
        ConnectSocket = INVALID_SOCKET;
    }

    const char *   toto   = "<connectionString>Data Source=10.100.17.114,2433;ENCRYPT=false;Initial Catalog=MetricsLocal;Persist Security Info=True;User ID=sa;Password=XXX</connectionString>";

    char *SendBuf = (char*)malloc(strlen(toto) * sizeof(char));
    // convert to network byte ordering. This is important for running on the ps3 and xenon
    for(INT BufIndex = 0; BufIndex < strlen(toto); ++BufIndex)
    {
        SendBuf[BufIndex] = toto[BufIndex];//htons(toto[BufIndex]);
    }


    int BytesSent           = send(ConnectSocket, SendBuf , strlen(SendBuf),0);

    printf("BytesSent = %d, Supposed = %d\n", BytesSent, strlen(toto));


    if (ConnectSocket == INVALID_SOCKET) {
        printf("Unable to connect to server!\n");
        WSACleanup();
        return 1;
    }


    return nRetCode;
}
#包括“stdafx.h”
#包括“ClientMFC.h”
#定义WIN32_精益_和_平均值
#包括
#包括
#包括
#包括
#包括
//需要链接到Ws2_32.lib、Mswsock.lib和Advapi32.lib
#pragma注释(lib,“Ws2_32.lib”)
#pragma注释(lib,“Mswsock.lib”)
#pragma注释(lib,“AdvApi32.lib”)
使用名称空间std;
int_tmain(int-argc,TCHAR*argv[],TCHAR*envp[]
{
int nRetCode=0;
HMODULE HMODULE=::GetModuleHandle(NULL);
if(hModule!=NULL)
{
//初始化MFC并打印,失败时出错
如果(!AfxWinInit(hModule,NULL,::GetCommandLine(),0))
{
//TODO:更改错误代码以满足您的需要
_tprintf(_T(“致命错误:MFC初始化失败”);
nRetCode=1;
}
其他的
{
//TODO:在此处编写应用程序的行为代码。
}
}
其他的
{
//TODO:更改错误代码以满足您的需要
_tprintf(_T(“致命错误:GetModuleHandle失败\n”);
nRetCode=1;
}
//WSADATA是由调用填充的结构
//到WSAStartup
WSADATA WSADATA;
//WSAStartup初始化调用WinSock的程序。
//第一个参数指定了文件的最高版本
//WinSock规范,该程序允许使用。
int wsaret=WSAStartup(0x101和wsaData);
//WSAStartup在成功时返回零。
//如果失败了,我们就退出。
如果(wsaret!=0)
{
返回0;
}
SOCKET ConnectSocket=无效的_套接字;
dest_addr;//中的struct sockaddr_将保存目标地址
dest\u addr.sin\u family=AF\u INET;//主机字节顺序
dest_addr.sin_port=htons(2433);//短,网络字节顺序
dest_addr.sin_addr.s_addr=inet_addr(“10.100.17.114”);
memset(&(dest_addr.sin_zero),'\0',8);//将结构的其余部分归零
ConnectSocket=socket(AF_INET,SOCK_STREAM,0);//执行一些错误检查!
//连接到服务器。
int-iResult=connect(ConnectSocket,(struct sockaddr*)和dest_addr,sizeof(struct sockaddr));
if(iResult==SOCKET\u错误){
闭合插座(连接插座);
ConnectSocket=无效的_套接字;
}
const char*toto=“数据源=10.100.17.1142433;加密=false;初始目录=MetricsLocal;持久安全信息=True;用户ID=sa;密码=XXX”;
char*SendBuf=(char*)malloc(strlen(toto)*sizeof(char));
//转换为网络字节顺序。这对于在ps3和xenon上运行非常重要
对于(INT-BufIndex=0;BufIndex
请注意,我已经隐藏了我的密码。 这段代码应该很容易让您尝试。只需将ws2_32.lib添加到链接器中即可。 我真的被这件事缠住了。 我敢肯定尺寸是正确的。我还编写了一个套接字服务器来检查我收到的内容,它看起来是正确的。 思想: -我是否需要未在任何地方描述的标题? -我有什么特别的设置要做吗?
我的telnet连接告诉我我的端口已打开并准备就绪。如果您已经做到这一点,为什么不尝试启动wireshark并将您的数据包与来自ADO.NET的本机SQL server数据包进行比较?我真的无法从这个工具中获得任何可读性!你能告诉我我应该在Wireshark投资什么吗?这是一个有点TMI的,因为它是!