台中自助游攻略:vb中如何用winsock控件或是别的控件从网卡上读取图像数据并显示,请给出详细的程序

来源:百度文库 编辑:神马品牌网 时间:2024/04/28 23:22:05
确实会者或者有相关程序者请与我联系,qq 93547712。加我时请说明程序问题。

// Example:
// GetHTTP www.idgbooks.com /index.html > index.html
//

#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <winsock.h>

void GetHTTP(LPCSTR lpServerName, LPCSTR lpFileName);

// Helper macro for displaying errors
#define PRINTERROR(s) \
fprintf(stderr,"\nError%: %d\n", s, WSAGetLastError())

////////////////////////////////////////////////////////////

void main(int argc, char **argv)
{
WORD wVersionRequested = MAKEWORD(1,1);
WSADATA wsaData;
int nRet;

//
// Check arguments
//
if (argc != 3)
{
fprintf(stderr,
"\nSyntax: GetHTTP ServerName /FullPathName > youfilename.xxx\n");
return;
}

//
// Initialize WinSock.dll
//
nRet = WSAStartup(wVersionRequested, &wsaData);
if (nRet)
{
fprintf(stderr,"\nWSAStartup(): %d\n", nRet);
WSACleanup();
return;
}

//
// Check WinSock version
//
if (wsaData.wVersion != wVersionRequested)
{
fprintf(stderr,"\nWinSock version not supported\n");
WSACleanup();
return;
}

//
// Set "stdout" to binary mode
// so that redirection will work
// for .gif and .jpg files
//
_setmode(_fileno(stdout), _O_BINARY);

//
// Call GetHTTP() to do all the work
//
GetHTTP(argv[1], argv[2]);

//
// Release WinSock
//
WSACleanup();
}

////////////////////////////////////////////////////////////

void GetHTTP(LPCSTR lpServerName, LPCSTR lpFileName)
{
//
// Use inet_addr() to determine if we're dealing with a name
// or an address
//
IN_ADDR iaHost;
LPHOSTENT lpHostEntry;

iaHost.s_addr = inet_addr(lpServerName);
if (iaHost.s_addr == INADDR_NONE)
{
// Wasn't an IP address string, assume it is a name
lpHostEntry = gethostbyname(lpServerName);
}
else
{
// It was a valid IP address string
lpHostEntry = gethostbyaddr((const char *)&iaHost,
sizeof(struct in_addr), AF_INET);
}
if (lpHostEntry == NULL)
{
PRINTERROR("gethostbyname()");
return;
}

//
// Create a TCP/IP stream socket
//
SOCKET Socket;

Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (Socket == INVALID_SOCKET)
{
PRINTERROR("socket()");
return;
}

//
// Find the port number for the HTTP service on TCP
//
LPSERVENT lpServEnt;
SOCKADDR_IN saServer;

lpServEnt = getservbyname("http", "tcp");
if (lpServEnt == NULL)
saServer.sin_port = htons(80);
else
saServer.sin_port = lpServEnt->s_port;

//
// Fill in the rest of the server address structure
//
saServer.sin_family = AF_INET;
saServer.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list);

//
// Connect the socket
//
int nRet;

nRet = connect(Socket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));
if (nRet == SOCKET_ERROR)
{
PRINTERROR("connect()");
closesocket(Socket);
return;
}

//
// Format the HTTP request
//
char szBuffer[102400];

sprintf(szBuffer, "GET %s\r\n\r\n", lpFileName);
nRet = send(Socket, szBuffer, strlen(szBuffer), 0);

if (nRet == SOCKET_ERROR)
{
PRINTERROR("send()");
closesocket(Socket);
return;
}

//
// Receive the file contents and print to stdout
//
while(1)
{
// Wait to receive, nRet = NumberOfBytesReceived
nRet = recv(Socket, szBuffer, sizeof(szBuffer), 0);
if (nRet == SOCKET_ERROR)
{
PRINTERROR("recv()");
break;
}
fprintf(stderr,"\nrecv() returned %d bytes", nRet);
// Did the server close the connection?
if (nRet == 0)
{
PRINTERROR("server close connection");
break;
}
// Write to stdout
fwrite(szBuffer, nRet, 1, stdout);
}
closesocket(Socket);
}