最近專案開發用到socket,socket能進行ip連接我知道,但是如果服務端提供的是“帶引數的url”要怎么處理呢?
有大神指導下不?
uj5u.com熱心網友回復:
在線等中
uj5u.com熱心網友回復:
重點的問題點是,不知道怎么處理帶引數的域名uj5u.com熱心網友回復:
有人么
uj5u.com熱心網友回復:
先獲取到ip,在通過socket創建。參考:struct hostent *he;
he = gethostbyname( argv[1]);
char destIP[128];
char **phe = NULL;
for( phe=he->h_addr_list ; NULL != *phe ; ++phe){
inet_ntop(he->h_addrtype,*phe,destIP,sizeof(destIP));
printf("%s\n",destIP);
uj5u.com熱心網友回復:
這樣的話只是單純的得到ip地址,那url的引數呢?怎么處理
uj5u.com熱心網友回復:
假設url是這樣的https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography.rsacryptoserviceprovider?redirectedfrom=MSDN&view=netframework-4.8,要怎么處理,用socketuj5u.com熱心網友回復:
沒有任何必要去手寫這一套東西。沒有任何必要去手寫這一套東西。
沒有任何必要去手寫這一套東西。
建議用適合的工具去做適合的事。你的需求可以用http服務器來實作。要么自己寫一個http server,要么直接換一個web開發環境。
HTTP本質上還是文本通信(在部分場景里會傳輸二進制資料),正常的流程是:客戶端(瀏覽器、開發環境里的web client等等)向服務器發送Http請求,服務器處理以后回傳Http回應。
http請求可以去搜它的結構,就是純文本,第一部分:請求型別、URI、協議 (比如GET/sample.jsp HTTP/1.1);第二部分:請求頭部,里面有很多約束或者預置變數定義;第三部分就是請求的正文部分。類似地,http回應也有自己的格式定義,包含了狀態碼,回應頭,回應正文。
你的例子當中:
https://docs.microsoft.com 位于第二部分,Host變數中;
/zh-cn/dotnet/api/system.security.cryptography.rsacryptoserviceprovider位于第一部分,在URI部分;
redirectedfrom=MSDN&view=netframework-4.8 位于第三部分正文中。
事實上,如果不是為了學習目的想自己嘗試實作一下,手寫http服務器是很不明智的行為(從你問的問題來看,肯定不是因為學習目的)。
socket在80埠偵聽,收到文本了,判斷它是不是合法的http請求(通過確認收到的文本是否符合第一部分的格式要求),然后從三個部分中摘取出你要的內容,處理完,拼出一個符合標準的http回應訊息發送回去。另外,如果你是https協議,還需要自己實作https通信的加密程序。
更合適的做法是,涉及到http服務,使用php、python、.Net、JAVA這些合適的工具去寫一個WEB工程,然后部署到apache、tomcat、IIS、NGINX之類的web服務器中,而非用c去手寫一個web服務端來實作。
uj5u.com熱心網友回復:
現有的專案中有http協議埠,不過只能進行短連接,現需求實作長連接,所以想弄socket來實作這個功能。我這端是客戶端來的
uj5u.com熱心網友回復:
http就是短連接協議,一般不會有長連接的需求。請求一個資源,服務器回傳給我。下次有需求了,我繼續請求。就是這樣的一個作業流程。如果一定要長連接,用websocket。uj5u.com熱心網友回復:
socket 建立的是tcp/udp 連接,屬于傳輸層, http帶url的地址已經算是應用層了,屬于傳輸的資料,直接寫在send里面就行了,按照http 頭格式寫轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/108985.html
標籤:專題技術討論區
上一篇:linux網路連接數
