socket的概念:
socket,即套接字,用於描述位址和埠,是乙個通訊鏈的控制代碼。
應用程式通過socket像網路發出請求或者回應。
什麼事客戶/伺服器模式:
在tcp/ip網路應用中,通訊的兩個程序相互作用的主要模式是客戶/伺服器模式,即客戶端向伺服器發出請求,伺服器接收請求後,提供相應的服務。客戶/伺服器模式的建立基於以下兩點:
1:建立網路的起因是網路中軟硬體資源、運算能力和資訊不均等,需要共享,從而造就擁有眾多資源的主機提供服務,資源較少的客戶請求服務這一非對等作用
2:網間程序通訊完全是非同步的,相互通訊的程序間既不存在父子關係,又不共享記憶體緩衝區
因此需要一種機制為希望通訊的程序間建立聯絡,為二者的資料交換提供同步,這就是基於客戶/服務端模式的tcp/ip
(這部分內容摘自socket程式設計原理)
需要做什麼:
客戶端:建立socket,通過埠號和位址確定目標伺服器,使用connect連線到伺服器,send傳送訊息,等待處理,通訊完成後呼叫closesocket關閉socket
服務端:建立socket,宣告自身的埠號和位址並繫結到socket,使用listen開啟監聽,然後不斷用accept去檢視是否有連線,如果有,捕獲socket,並通過recv獲取訊息的內容,通訊完成後呼叫closesocket關閉這個對應accept到的socket,如果不再需要等待任何客戶端連線,那麼用closesocket關閉掉自身的socket
**示例
客戶端:這裡建立乙個clientnet類,用於表示乙個客戶
[cpp]view plain
copy
#pragma once
/*clinetnet.h:
用於表示乙個客戶的網路操作
*/#include
#include
#pragma comment(lib, "ws2_32.lib")
class
cclientnet
;
[cpp]view plain
copy
/*clientnet.cpp
*/#include "clientnet.h"
intcclientnet::connect(
intport,
const
char
* address )
//建立socket
m_sock = socket(af_inet,sock_stream,ipproto_tcp);
if(m_sock == invalid_socket)
//建立socket失敗
//目標伺服器資料
sockaddr_in sockaddrserver;
sockaddrserver.sin_family = af_inet;
sockaddrserver.sin_port = port;
sockaddrserver.sin_addr.s_addr = inet_addr(address);
//連線,sock與目標伺服器連線
ierrmsg = connect(m_sock,(sockaddr*)&sockaddrserver,sizeof
(sockaddrserver));
if(ierrmsg < 0)
return
rlt;
} int
cclientnet::sendmsg(
const
char
* msg,
intlen)
return
rlt;
} void
cclientnet::close()
[cpp]view plain
copy
#include "clientnet.h"
void
main()
服務端**:
[cpp]view plain
copy
#pragma once
/*servernet.h
用於表示服務端的網路操作
*/#include
#include
#pragma comment (lib,"ws2_32.lib")
class
cservernet
;
[cpp]view plain
copy
/*servernet.cpp
*/#include "servernet.h"
intcservernet::init(
const
char
* address,
intport )
//建立服務端socket
m_sock = socket(af_inet,sock_stream,ipproto_tcp);
if(m_sock == invalid_socket)
//宣告資訊
sockaddr_in serveraddr;
serveraddr.sin_family = af_inet;
serveraddr.sin_port = port;
serveraddr.sin_addr.s_addr = inet_addr(address);
//繫結
ierrormsg = bind(m_sock,(sockaddr*)&serveraddr,sizeof
(serveraddr));
if(ierrormsg < 0)
return
rlt;
} void
cservernet::run()
else
while
(rval != 0);
//關閉對應accept的socket
closesocket(newsocket);
} } while
(1);
//關閉自身的socket
closesocket(m_sock);
}
[cpp]view plain
copy
#include "servernet.h"
intmain(
intargc,
char
**argv)
else
printf("servernet init failed with error : %d\n"
,irlt);
system("pause"
);
}
程式設計,還是程式設計
喜歡程式設計,雖然水平一般,但還是執著地學習與程式設計有關的知識。中間因為工作關係與程式設計遠離了一段時間,現在又重拾起來,細想起來還是因為喜歡吧。喜歡程式軟體的思想和原理,喜歡程式 的魅力和成就感。程式設計軟體的思想是最值得學習的,一直認為思想決定行動,思想改變世界。每種軟體的流行和受人追捧,無不...
少兒程式設計程式設計
機械人比賽,聽上去讓人有一種高大上的科技感,沒錯,在大多數人眼裡,玩機械人那是科學家做的事情,不過隨著機械人教育的普及,越來越多的孩子也能夠駕馭這高大上的機械人。格物斯坦小坦克告訴你原因,這是歸結於孩子對於程式設計課程的學習,學會對機械人進行程式設計了,自然就能玩轉機械人啦。參加機械人比賽的意義遠遠...
LINUX程式設計 socket程式設計
什麼是套接字 套接字是一種通訊過程,它使客戶 伺服器系統的開發工作既可以在本地單機上進行,也可以跨網路進行。套接字建立過程 1,建立乙個套接字,這是分配給該伺服器程序的乙個作業系統資源,套接字由伺服器通過系統呼叫socket建立出來的,所以其它程序將不能對它進行訪問。2,給套接字起個名字,用系統呼叫...