C win socket程式設計

2021-06-22 21:34:06 字數 3447 閱讀 9524

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,給套接字起個名字,用系統呼叫...