通過CMWAP進行SOCKET串連通訊

來源:互聯網
上載者:User

Socket對大部分程式員來說應該不陌生,作為行動裝置的開發人員,對其應該更加瞭解。

在手機上,上網的存取點大致分為CMWAP和CMNET兩種,在CMNET存取點上建立socket通訊應該和在電腦上一樣,在這裡我也就不多說,詳情請參考:《GPRS開發系列文章之實戰篇》(google一下就有,在這裡感謝該作者)。

 

下面講講我在CMWAP存取點上建立Socket的經驗吧,若有不對之處希望大家指出。

 

1.建立與移動Proxy 伺服器的socket串連:

bool CTCPClient_CE::Connect()<br />{<br /> //10.0.0.172為代理器地址,80為連接埠號碼<br /> CString m_remoteHost = _T("10.0.0.172");<br /> int m_port = 80;<br /> struct sockaddr_in addr;<br /> int err;</p><p> addr.sin_family = AF_INET;<br /> addr.sin_port = htons(m_port);<br /> //此處要將雙位元組轉換成單位元組<br /> char ansiRemoteHost[255];<br />ZeroMemory(ansiRemoteHost,255);<br />WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,m_remoteHost,wcslen(m_remoteHost)<br />,ansiRemoteHost,wcslen(m_remoteHost),NULL,NULL);</p><p> addr.sin_addr.s_addr=inet_addr(ansiRemoteHost);</p><p> //建立TCP通訊端<br /> m_socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);<br /> if (m_socket == INVALID_SOCKET)<br /> {<br /> return FALSE;<br /> }<br /> BOOL sopt = TRUE;<br /> setsockopt(m_socket, IPPROTO_TCP, TCP_NODELAY, (char *)&sopt, sizeof(BOOL));<br /> setsockopt(m_socket, SOL_SOCKET, SO_DONTLINGER, (char *)&sopt, sizeof(BOOL));<br /> //此時採用同步串連方式,connect直接返回成功或是失敗<br /> err = connect(m_socket,(struct sockaddr *)&addr,sizeof(addr));</p><p> if (err == SOCKET_ERROR)<br /> {<br /> return FALSE;<br /> }<br /> //設定通訊模式為非同步模式<br /> DWORD ul= 1;<br /> ioctlsocket(m_socket,FIONBIO,&ul);<br /> return TRUE;<br />}

 

2.向伺服器發送請求:

void CTCPClient_CE::ConnectHTTP()<br />{<br /> char tmpBuffer[40];<br /> memset(tmpBuffer,0,40);<br /> //116.26.99.xx為需要已連線的服務端的ip,6000為服務端連接埠<br /> static const char* protocolHead = "CONNECT 116.26.99.xx:6000 HTTP/1.1/r/nUser-Agent: MyApp/0.1/r/n/r/n";<br /> send(m_socket, protocolHead,strlen(protocolHead),0);<br />}

 

3.判斷請求是否成功:

接下來你會收到伺服器的回應,如果成功的話,回應應該是"HTTP/" + 代理版本 + "200" + 描述("Connection established")

下面的代碼是對回應進行判斷

//buf為接受到字串的緩衝區<br />char *tmp=strchr(buf,' ');<br />char flag[4];<br />for(int i=0;i<3;i++)<br />flag[i]=tmp[i+1];<br />flag[4]='/0';<br />if(!strcmp(flag,"200"))<br />{<br /> AfxMessageBox(_T("串連代理服務成功!"));<br />}<br />else<br />{<br /> AfxMessageBox(_T("串連代理服務失敗!"));<br />}<br />

 

接下來就可以和你想要串連到的伺服器進行串連啦~~這隻是我個人在網上拼拼湊湊寫出來的,如果有不對的地方還希望各位給與指正!

參考網站:

http://blog.csdn.net/wbczyh/archive/2008/02/24/2117094.aspx

http://larch.blog.51cto.com/277889/51991

http://www.cnblogs.com/jsjkandy/archive/2008/08/06/1262445.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.