導航:首頁 > 編程語言 > socket編程百度雲

socket編程百度雲

發布時間:2022-11-02 02:44:49

① 《Android4.0網路編程詳解》pdf下載在線閱讀,求百度網盤雲資源

《Android 4.0網路編程詳解》(王家林)電子書網盤下載免費在線閱讀

資源鏈接:

鏈接:

提取碼:6shy

書名:Android 4.0網路編程詳解

作者:王家林

出版社:電子工業出版社

出版年份:2012-1

頁數:374

內容簡介:《Android 4.0網路編程詳解》對Android 4.0網路編程中的XML形式,JSON操作,需要掌握的HTTP知識,數據下載/上傳,Socket編程,瀏覽器開發,Android中軟體界面設計新大陸——採用HTML設計軟體界面,Android應用程序的生命周期等內容進行了深入的講解。

② 什麼是socket網路編程

使用socket套接字,利用TCP/IP或者UDP協議,實現幾個機器之間的通信。一般使用C/S結構。
以TCP/IP為例:首先建立一個伺服器,步驟如下:socket()創建一個socket,bind()綁定socket到一個埠,listen()監聽埠,accept()等待客戶端的連接。客戶端程序:socket()創建一個socket,可以綁定也可以不綁定,然後connect()連接到伺服器端。socket又分為阻塞式的和非阻塞式的。阻塞式的就是伺服器端等待連接直到連接上,不然一直掛起。

③ 求Java TCP IP Socket編程-卡爾弗特書籍電子版百度雲資源

JavaTCPIPSocket編程-卡爾弗特鏈接:https://pan..com/s/1qZz-_sSOb-9247Sbd9jkjA

提取碼:XGXN

④ socket編程到底是什麼

socket 其實就是操作系統提供給程序員操作「網路協議棧」的介面,說人話就是,你能通過socket 的介面,來控制協議找工作,從而實現網路通信,達到跨主機通信。

協議棧的上半部分有兩塊,分別是負責收發數據的 TCP 和 UDP 協議,它們兩會接受應用層的委託執行收發數據的操作。

協議棧的下面一半是用 IP 協議控制網路包收發操作,在互聯網上傳數據時,數據會被切分成一塊塊的網路包,而將網路包發送給對方的操作就是由 IP 負責的。這里需要注意的是,服務端調用 accept 時,連接成功了會返回一個已完成連接的 socket,後續用來傳輸數據。

所以,監聽的 socket 和真正用來傳送數據的 socket,是「兩個」 socket,一個叫作監聽 socket,一個叫作已完成連接 socket。成功連接建立之後,雙方開始通過 read 和 write 函數來讀寫數據,就像往一個文件流裡面寫東西一樣。

⑤ socket編程 ~~急~~~

socket封裝的HTTP下載類
//HttpDownload.h
#ifndef _HTTPDOWNLOAD_H
#define _HTTPDOWNLOAD_H

//#include "InitSock.h"

//static CInitSock initsock;

/************************************************************************
Description: Base64編碼、解碼類
Function: 可用於解決http協議的授權驗證問題
************************************************************************/
class CBase64
{
private:
CBase64();
~CBase64();
CBase64(const CBase64&);
CBase64& operator = (const CBase64&);

public:
static int Base64Encode(LPCTSTR lpszEncoding, CString& strEncoded);
static int Base64Decode(LPCTSTR lpszDecoding, CString& strDecoded);

public:
static int s_nBase64Mask[];
static CString s_strBase64TAB;
};

/************************************************************************
Description: 用http協議下載文件
Function: 支持http下載文件,用socket實現, 簡單的非阻塞超時機制
************************************************************************/
class CHttpDownload
{
public:
CHttpDownload();
~CHttpDownload();

public:
enum
{
DEFAULT_PORT = 80 ,
DEFAULT_CONNECTTIMEOUT = 10,
DEFAULT_SENDTIMEOUT = 10,
DEFAULT_RECVTIMEOUT = 10,
};

bool Download(LPCTSTR lpszDownloadUrl, LPCTSTR lpszSavePath);

protected:
bool CreateSocket();
void CloseSocket();

void FormatRequestHeader(const char* pszServer, int nPort, const char* pszObject, const char *pAuthorization = NULL);
bool SendRequest();

private:
bool Connect(const char* pszHostIP, int nPort = DEFAULT_PORT, long ltimeout = DEFAULT_CONNECTTIMEOUT);
int SelectRecv(char *pData, int len, long timeout = DEFAULT_RECVTIMEOUT);
int SelectSend(char *pData, int len, long timeout = DEFAULT_SENDTIMEOUT);

bool GetResponseHeader();
int GetServerInfo(DWORD &dwContentLength, DWORD &dwStatusCode) const;

private:
SOCKET m_hSocket;
char m_szRequestHeader[1024]; //保存請求頭
char m_szResponseHeader[1024]; //保存響應頭
int m_nResponseHeaderSize; //響應頭大小
};

static bool ParseURL(LPCTSTR lpszURL, CString &strServer, CString &strObject, int& nPort)
{
CString strURL(lpszURL);
strURL.TrimLeft();
strURL.TrimRight();

// 清除數據
strServer = _T("");
strObject = _T("");
nPort = 0;

int nPos = strURL.Find("://");
if( nPos == -1 )
return false;

// 進一步驗證是否為http://
CString strTemp = strURL.Left( nPos + lstrlen("://") );
strTemp.MakeLower();
if( strTemp.Compare("http://") != 0 )
return false;

strURL = strURL.Mid( strTemp.GetLength() );
nPos = strURL.Find('/');
if ( nPos == -1 )
return false;

strObject = strURL.Mid(nPos);
strTemp = strURL.Left(nPos);

///////////////////////////////////////////////////////////////
/// 注意:並沒有考慮URL中有用戶名和口令的情形和最後有#的情形
/// 例如:http://abc@def:www.yahoo.com:81/index.html#link1
///
//////////////////////////////////////////////////////////////

// 查找是否有埠號
nPos = strTemp.Find(":");
if( nPos == -1 )
{
strServer = strTemp;
nPort = CHttpDownload::DEFAULT_PORT;
}
else
{
strServer = strTemp.Left( nPos );
strTemp = strTemp.Mid( nPos+1 );
nPort = _ttoi((LPCTSTR)strTemp);
}

return true;
}

#endif
//HttpDownload.cpp
#include "StdAfx.h"
#include "HttpDownload.h"

/************************************************************************

************************************************************************/
int CBase64::s_nBase64Mask[] = {0, 1, 3, 7, 15, 31, 63, 127, 255};
CString CBase64::s_strBase64TAB = _T("+/");

int CBase64::Base64Decode(LPCTSTR lpszDecoding, CString& strDecoded)
{
int nIndex =0;
int nDigit;
int nDecode[ 256 ];
int nSize;
int nNumBits = 6;

if( lpszDecoding == NULL )
return 0;

if( ( nSize = lstrlen(lpszDecoding) ) == 0 )
return 0;

// Build Decode Table
for( int i = 0; i < 256; i++ )
nDecode[i] = -2; // Illegal digit
for( i=0; i < 64; i++ )
{
nDecode[ s_strBase64TAB[ i ] ] = i;
nDecode[ '=' ] = -1;
}

// Clear the output buffer
strDecoded = _T("");
long lBitsStorage =0;
int nBitsRemaining = 0;
int nScratch = 0;
UCHAR c;

// Decode the Input
for( nIndex = 0, i = 0; nIndex < nSize; nIndex++ )
{
c = lpszDecoding[ nIndex ];

// 忽略所有不合法的字元
if( c> 0x7F)
continue;

nDigit = nDecode[c];
if( nDigit >= 0 )
{
lBitsStorage = (lBitsStorage << nNumBits) | (nDigit & 0x3F);
nBitsRemaining += nNumBits;
while( nBitsRemaining > 7 )
{
nScratch = lBitsStorage >> (nBitsRemaining - 8);
strDecoded += (nScratch & 0xFF);
i++;
nBitsRemaining -= 8;
}
}
}

return strDecoded.GetLength();
}

int CBase64::Base64Encode(LPCTSTR lpszEncoding, CString& strEncoded)
{
int nDigit;
int nNumBits = 6;
int nIndex = 0;
int nInputSize;

strEncoded = _T( "" );
if( lpszEncoding == NULL )
return 0;

if( ( nInputSize = lstrlen(lpszEncoding) ) == 0 )
return 0;

int nBitsRemaining = 0;
long lBitsStorage = 0;
long lScratch = 0;
int nBits;
UCHAR c;

while( nNumBits > 0 )
{
while( ( nBitsRemaining < nNumBits ) && ( nIndex < nInputSize ) )
{
c = lpszEncoding[ nIndex++ ];
lBitsStorage <<= 8;
lBitsStorage |= (c & 0xff);
nBitsRemaining += 8;
}
if( nBitsRemaining < nNumBits )
{
lScratch = lBitsStorage << ( nNumBits - nBitsRemaining );
nBits = nBitsRemaining;
nBitsRemaining = 0;
}
else
{
lScratch = lBitsStorage >> ( nBitsRemaining - nNumBits );
nBits = nNumBits;
nBitsRemaining -= nNumBits;
}
nDigit = (int)(lScratch & s_nBase64Mask[nNumBits]);
nNumBits = nBits;
if( nNumBits <=0 )
break;

strEncoded += s_strBase64TAB[ nDigit ];
}
// Pad with '=' as per RFC 1521
while( strEncoded.GetLength() % 4 != 0 )
strEncoded += '=';

return strEncoded.GetLength();
}

/************************************************************************

************************************************************************/
CHttpDownload::CHttpDownload():
m_hSocket(INVALID_SOCKET),
m_nResponseHeaderSize(0)
{
memset(m_szRequestHeader, 0, sizeof(m_szRequestHeader));
memset(m_szResponseHeader, 0, sizeof(m_szResponseHeader));
}

CHttpDownload::~CHttpDownload()
{
CloseSocket();
}

bool CHttpDownload::CreateSocket()
{
CloseSocket();

m_hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == m_hSocket)
{
return false;
}
return true;
}

void CHttpDownload::CloseSocket()
{
if (INVALID_SOCKET != m_hSocket )
{
closesocket(m_hSocket);
m_hSocket = INVALID_SOCKET;
}
}

void CHttpDownload::FormatRequestHeader(const char* pszServer, int nPort, const char* pszObject, const char *pAuthorization /* = NULL */)
{
memset(m_szRequestHeader, '\0', 1024);

//第1行:請求的方法,路徑,版本
strcat(m_szRequestHeader, "GET ");
strcat(m_szRequestHeader, pszObject);
strcat(m_szRequestHeader, " HTTP/1.0");
strcat(m_szRequestHeader, "\r\n");
//第2行:請求的數據類型
strcat(m_szRequestHeader, "Accept: */*");
strcat(m_szRequestHeader, "\r\n");

//第3行:主機,埠
char szPort[10];
sprintf(szPort, ":%d", nPort);
strcat(m_szRequestHeader, "Host: ");
strcat(m_szRequestHeader, pszServer);
strcat(m_szRequestHeader, szPort);
strcat(m_szRequestHeader, "\r\n");

//第4行:緩沖控制
strcat(m_szRequestHeader, "Catch-control: no-cache");
strcat(m_szRequestHeader, "\r\n");

//第5行:訪問許可權
if (pAuthorization)
{
CString strAuth;
strcat(m_szRequestHeader, "Authorization: Basic ");
CBase64::Base64Encode(pAuthorization, strAuth);
strcat(m_szRequestHeader, strAuth);
strcat(m_szRequestHeader, "\r\n");
}
//最後一行:空行
strcat(m_szRequestHeader, "\r\n");

}

bool CHttpDownload::SendRequest()
{
int len = strlen(m_szRequestHeader);

//if(send(m_hSocket,m_szRequestHeader,len,0)==SOCKET_ERROR)
//{
// return false;
//}

if (SelectSend(m_szRequestHeader, len ,DEFAULT_SENDTIMEOUT) <= 0)
{
return false;
}

if (!GetResponseHeader())
{
return false;
}
return true;
}

bool CHttpDownload::Connect(const char* pszHostIP, int nPort /* DEFAULT_PORT */, long ltimeout /* DEFAULT_CONNECTTIMEOUT*/)
{
ASSERT(pszHostIP);

sockaddr_in addr;
memset( &addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(nPort);
addr.sin_addr.S_un.S_addr = inet_addr(pszHostIP);

unsigned long ul = 1;
int ret = ioctlsocket(m_hSocket, FIONBIO, (unsigned long*)&ul);
if( ret == SOCKET_ERROR)
{
return false;
}

connect(m_hSocket, (sockaddr*)&addr, sizeof(addr));

timeval timeout = { 1, ltimeout };
fd_set r;

FD_ZERO(&r);
FD_SET(m_hSocket, &r);

ret = select(0, 0, &r, 0, &timeout);
if( ret <= 0 )
{
return false;

}
//一般非鎖定模式套接比較難控制,可以根據實際情況考慮 再設回阻塞模式
unsigned long ul1= 0 ;
ret = ioctlsocket(m_hSocket, FIONBIO, (unsigned long*)&ul1);
if( ret == SOCKET_ERROR)
{
return false;
}

return true;
}

bool CHttpDownload::GetResponseHeader()
{
char c = 0;
bool bEndResponse = false;
int nIndex = 0;
int ret;

while(!bEndResponse && nIndex < 1024)
{
ret = SelectRecv(&m_szResponseHeader[nIndex++], 1);
if (ret <= 0)
return false;

if(nIndex >= 4)
{
if(m_szResponseHeader[nIndex - 4] == '\r' && m_szResponseHeader[nIndex - 3] == '\n'
&& m_szResponseHeader[nIndex - 2] == '\r' && m_szResponseHeader[nIndex - 1] == '\n')
bEndResponse = true;
}
}
m_nResponseHeaderSize = nIndex;

return true;
}

int CHttpDownload::GetServerInfo(DWORD &dwContentLength, DWORD &dwStatusCode) const
{
if (0 == m_nResponseHeaderSize)
{
dwContentLength = -1;
dwStatusCode = -1;
return -1;
}
char szState[3];
szState[0] = m_szResponseHeader[9];
szState[1] = m_szResponseHeader[10];
szState[2] = m_szResponseHeader[11];

dwStatusCode = (DWORD)_ttol(szState);

// 獲取ContentLength
CString strResponseHeader = m_szResponseHeader;
int nPos = strResponseHeader.Find("Content-length:");
if (nPos == -1)
return -1;

CString strDownFileLen = strResponseHeader.Mid(nPos + strlen("Content-length:"));
nPos = strDownFileLen.Find("\r\n");
if (nPos == -1)
return -1;

strDownFileLen = strDownFileLen.Left(nPos);
strDownFileLen.TrimLeft();
strDownFileLen.TrimRight();

// Content-Length:
dwContentLength = (DWORD) _ttol( (LPCTSTR)strDownFileLen );

return 0;
}

int CHttpDownload::SelectSend(char *pData, int len, long timeout /* = DEFAULT_RECVTIMEOUT */)
{
fd_set writefds;
FD_ZERO(&writefds);
FD_SET(m_hSocket, &writefds);

timeval tv = { timeout, 0 };

int ret = select(0, NULL, &writefds, NULL, &tv);
if ( ret == 0 || ret == SOCKET_ERROR)
{
return 0;
}

if (FD_ISSET(m_hSocket, &writefds) == 0)
return 0;

ret = send(m_hSocket, pData, len, 0);

if (ret == SOCKET_ERROR)
{
// DWORD dwError = WSAGetLastError();
return 0;
}
else if (ret == 0)
{
return 0;
}

return ret;
}

int CHttpDownload::SelectRecv(char *pData, int len, long timeout)
{
fd_set readfds;
FD_ZERO(&readfds);
FD_SET(m_hSocket, &readfds);

timeval tv = { timeout, 0 };

int ret = select(0, &readfds, NULL, NULL, &tv);
if ( ret == 0 || ret == SOCKET_ERROR)
{
return 0;
}

if (FD_ISSET(m_hSocket, &readfds) == 0)
return 0;

ret = recv(m_hSocket, pData, len, 0);

if (ret == SOCKET_ERROR)
{
// DWORD dwError = WSAGetLastError();
return 0;
}
else if (ret == 0)
{
return 0;
}

return ret;
}

/************************************************************************
下載歷史事件告警記錄文件
http://172.16.0.108/histevent.xml
************************************************************************/
bool CHttpDownload::Download(LPCTSTR lpszDownloadUrl, LPCTSTR lpszSavePath)
{
int nPort;
CString strService, strObject;

if (!ParseURL(lpszDownloadUrl, strService, strObject, nPort))
{
return false;
}

if (!CreateSocket())
return false;
if (!Connect(strService, nPort))
return false;

FormatRequestHeader(strService, nPort, strObject);

if (!SendRequest())
return false;

DWORD dwFileLen, dwStatuCode;
if (-1 == GetServerInfo(dwFileLen, dwStatuCode))
{
return false;
}

CFile filedown;
if (!filedown.Open(lpszSavePath, CFile::modeCreate|CFile::modeWrite))
{
return false;
}

DWORD dwTotalBytes = 0;
char szdata[2048] = { 0 };
while (dwTotalBytes < dwFileLen)
{
int nRecvBytes = SelectRecv(szdata, 2048);
if (nRecvBytes <= 0 )
{
break;
}
filedown.Write(szdata, nRecvBytes);
dwTotalBytes += nRecvBytes;
}

CloseSocket();
filedown.Close();

if (dwTotalBytes < dwFileLen)
{
try
{
CFile::Remove(lpszSavePath);
}
catch (CFileException* e)
{
e->Delete();
}

return false;
}

return true;
}

⑥ socket介面網路編程

面向無連接的端對端通信
//#include <winsock2.h>
//#pragma comment(lib,"WS2_32.lib")
WSADATA wsd;
SOCKET s;
char buf[1024];
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
return -1;//失敗
}
s=socket(AF_INET,SOCK_DGRAM,0);
if(s==INVALID_SOCKET)
{
WSACleanup();
return -1;//創建套接字失敗
}
SOCKADDR_IN servAddr;
servAddr.sin_family=AF_INET;
servAddr.sin_addr.s_addr=inet_addr(%%1);
servAddr.sin_port=htons(INADDR_ANY);
if(bind(s,(SOCKADDR*)&servAddr,sizeof(SOCKADDR_IN))==SOCKET_ERROR)
{
closesocket(s);
WSACleanup();
return -1;//綁定套接字失敗
}
int nServAddrlen=sizeof(servAddr);
ZeroMemory(buf,sizeof(buf));
if(recvfrom(s,buf,size(buf),0,(SOCKADDR*)&servAddr,nServAddrlen)==SOCKET_ERROR)
{
closesocket(s);
WSACleanup();
return -1;//接收數據失敗
}
CString %%2(buf);
ZeroMemory(buf,sizeof(buf));
strcpy(buf,%%3);
SOCKADDR_IN clientAddr;
clientAddr.sin_family=AF_INET;
clientAddr.sin_addr.s_addr=inet_addr(%%4);
clientAddr.sin_port=htons((short)%%5);
int nClientlen=size(clientAddr);
if(sendto(s,buf,sizeof(buf),0,(SOCKADDR*)&clientAddr,nClientlen)==SOCKET_ERROR)
{
closesocket(s);
WSACleanup();
return -1;//向伺服器發送數據失敗
}
closesocket(s);
WSACleanup();

⑦ 請問大佬有Mswinsck.ocx文件軟體免費百度雲資源嗎

鏈接:https://pan..com/s/1zVKo40oEi4ffgAzJAQ95zA

提取碼:tncx

軟體名稱:Mswinsck.ocx文件

語言:簡體中文

大小:55KB

類別:系統工具

介紹:mswinsck.ocx是VisualBasic語言的socket編程相關文件。如果缺少了該文件,會導致部分軟體或者游戲無法運行等問題。如果您的系統提示「找不到mswinsck.ocx」或「mswinsck.ocx缺失」或者「mswinsck.ocx錯誤」的問題,下載並解壓文件後:

⑧ socket編程問題(附代碼)

1.首先你的程序時是單線程的程序。
2.基於SOCKET的程序,也就是C/S程序,要區分那個是C,那個是S。
3.建議你看下孫鑫的VC++視頻裡面的基於SOCKET通信。

⑨ 用python進行socket編程老是報錯error: [Errno 10061] , 我是個新手,學了2天,求助大神!

兄弟,你太懶惰了。

  1. 不要直接貼代碼,除非有人要求你看看完整代碼

  2. 就算貼代碼,至少也要同時貼除報錯,你不會指望有人把你的代碼COPY下來,然後運行一次慢慢給你檢查吧。python用縮進表示代碼段的,你貼在這里後這些代碼的縮進全亂了,放在其他編輯器里也只有一個空格,根本沒有閱讀性啊!

  3. 雖然你的代碼有注釋,但是至少也要個簡單的說明關於你的代碼的。例如,這段代碼里的幾個函數分別用來干什麼的;在沒有大概印象前,很少有人會仔細的閱讀你的代碼。

如果你像解決這個問題,可以通過網路雲共享給我看看

閱讀全文

與socket編程百度雲相關的資料

熱點內容
五菱宏光空調壓縮機 瀏覽:64
為什麼app佔用幾百兆 瀏覽:676
自動解壓失敗叫我聯系客服 瀏覽:482
易語言新手源碼 瀏覽:456
oa伺服器必須有固定ip地址 瀏覽:42
傳奇源碼分析是什麼 瀏覽:267
解放壓縮機支架 瀏覽:255
程序員禿頂搞笑相遇 瀏覽:6
IBM手機app商店叫什麼名字 瀏覽:834
jpeg壓縮質量 瀏覽:774
雲伺服器評測對比 瀏覽:145
java日期轉string 瀏覽:221
openfire源碼編譯 瀏覽:897
在線小工具箱引流網站源碼 瀏覽:337
非科班程序員自學 瀏覽:801
壓縮泡沫鞋底底材 瀏覽:219
程序員職場第一課2正確的溝通 瀏覽:679
遇到不合法app應該怎麼辦 瀏覽:91
匯編程序編譯後的文件 瀏覽:81
大智慧均線源碼 瀏覽:374