TCP IP和網路通訊(TCP協議程式設計)

2021-05-28 03:24:44 字數 2271 閱讀 7802

對於客戶端client來說,建立模型的步驟:

if(wsastartup(0x101,&lpwsadata)!=0)

2、建立套接字:

if((hsocket=socket(af_inet,sock_stream,0))==invalid_socket)

注意其中if語句中的判斷順序,先有socket()函式的賦值到hsocket中,再有hsocket==invalid_socket,注意括號的使用,否則總是得到hsocket=invalid_socket;

3、設定套接字的工作模式:

wsaasyncselect(hsocket,hwnd,wm_socket,fd_connect|fd_read|fd_close|fd_write);

其中wm_socket是自定義訊息,當呼叫完這個函式後,此訊息便會和以hwnd為控制代碼的視窗繫結,當發生相應事件時,便一此訊息的低雙位元組的lparam來指定通知碼(fd_connet,fd_close或fd_weite);

4、連線到伺服器: 

int i=connect(hsocket,(struct sockaddr *)&stsin,sizeof(struct sockaddr));//將套接字繫結到ip位址和埠

其中結構變數stsin是乙個sockaddr_in型別的結構體變數: 

stsin.sin_addr.s_addr=inet_addr(szbuffers);//指定ip位址,其中inet_addr()函式將小數點分隔的ip位址字串轉換為32位二進位制表示的ip位址(網路位元組順序)

stsin.sin_family=af_inet;  //指定位址格式

stsin.sin_port= htons(tcp_port);//指定埠號,htons()函式將但前主機位元組順序排列的資料轉換成按網路順序排列的資料:

注意此時當發生這個連線動作後,伺服器端的視窗程式將會接收到fd_accept的通知碼,

(到這裡也就順便寫到伺服器端的模型建立:

1、也是裝入並初始化相關dll庫;

2、建立「監聽套接字」hsocket

3、設定工作模式為非阻塞模式:

wsaasyncselect(hsocket,hwnd,wm_socket,fd_accept|fd_read|fd_close);

int result=bind(hsocket,(struct sockaddr *)&stsin,sizeof(stsin));

5、監聽這個套接字: 

if(listen(hsocket,5)==socket_error)

messagebox(null,"監聽失敗",null,mb_ok);

)stsin.sin_addr.s_addr=dwipaddr;

stsin.sin_family=af_inet;

u_short ax=htons(tcp_port);//

stsin.sin_port= ax;

int i=connect(hsocket,(struct sockaddr *)&stsin,sizeof(struct sockaddr));

int i=connect(hsocket,(struct sockaddr *)&stsin,sizeof(struct sockaddr));

當伺服器端監聽到有客戶端傳送了連線請求,則在監聽套接字的作用下,伺服器端的訊息機制發生fd_accept的通知碼,來接收客戶端的請求:

if((hnewsocket=accept(wparam,0,0))==invalid_socket)

注意此時返回的套接字不是之前的那個「監聽套接字」了,這個套接字是和客戶端相連的,而和客戶端進行通訊而使用的recv和send都是針對此套接字;

5、向服務其端傳送訊息:

send(hsocket,szbuffer,strlen,0);

此時伺服器端將發生fd_read的通知碼,並可呼叫recv()函式獲得客戶端的文字內容:

recv(_hsocket,szreadbuffer,sizeof(szreadbuffer),null);

此時伺服器端可以以自己的文字格式向客戶端傳送文字訊息:

send(hsocket,szbuffer,strlen,0);

注意:其中_hsocket就是客戶端與伺服器端相連時所用到的套接字,在fd_read的wparam變數中便儲存著此值。

6、獲得有伺服器端傳送過來的文字請求:

同伺服器端相同,在fd_read通知碼中呼叫recv()接收伺服器端的文字格式內容『

closesocket(hsocket);  

wsacleanup();

wsacleanup();

Linux網路通訊 TCP IP協議

一 網路通訊 網路是通過物理鏈路將各個孤立的工作站或主機相連在一起,組成資料鏈路,從而達到資源共享和通訊的目的,通過資訊交換實現人與人 人與計算機 計算機與計算機之間的通訊。1.網路通訊要遵守網路協議,區域網中最常用的有三個網路協議 microsoft的netbeui novell的ipx spx和...

網路通訊概述 TCP協議

描述 一 請寫出ip位址的概念 二 請寫出埠號的概念 答案 ip位址 網際網路協議位址 internet protocol address 俗稱ip.ip位址用來給乙個網路中的計算機裝置做唯一的編號 埠號 埠號用來給計算機裡的應用程式 程序 做唯一的標識,用 2個位元組表示的整數 取值範圍 0 65...

TCP IP 網路通訊基礎

通過tcp ip讓兩台真機進行通訊,選定一台真機做伺服器,一台做客戶端,客戶端需要知道伺服器端的ip,通過adb命令可以檢視到連線到wifi的平板的ip,如圖,可以檢視到ip為192.168.1.79 注意一點 android3.0版本以後的網路通訊不能在主線程實現,而必須要新建執行緒去實現,這一點...