Socket程式設計客戶端原理簡單介紹

2021-07-10 22:54:42 字數 1814 閱讀 1055

和服務端原理差不多,只是少了兩個步驟.

客戶端:

初始化套接字(wsastartup)->建立套接字(socket)->連線伺服器(connect)->傳送/接收資料(send/recv)->關閉連線(closesocket,wsacleanup)

1.初始化套接字,也是獲取套接字.

wsadata是乙個存放套接字資訊的結構

利用wsastartup函式來獲取套接字資訊並且存放到wsadata

//成功返回0,失敗返回非零

int wsastartup(

word wversionrequested, //需要的版本

lpwsadata lpwsadata //套接字資訊結構

);

獲取到套接字資訊後還要判斷是否獲取的是2.2版本的.

方法如下:

//判斷版本

if (lobyte(wsadata.wversion) != 2 || hibyte(wsadata.wversion) != 2)

2.建立套接字

//成功返回乙個套接字,失敗返回invlid_socket

socket socket(

int af, // af 表示address family 位址族

inttype, //套接字的型別

int protocol//使用的傳輸協議

);

其中af的值可以是如下幾個常用的:

af_unix(本機通訊)

af_inet(tcp/ip – ipv4)

af_inet6(tcp/ip – ipv6)

type的值可以是如下幾個:

sock_stream(tcp流)

sock_dgram(udp資料報)

sock_raw(原始套接字)

注意:客戶端的af,type都要和伺服器的一樣

3.連線伺服器

//成功返回0,失敗返回socket_error

int connect(

socket s, //客戶端套接字

const

struct sockaddr far* name,//伺服器位址

int namelen //長度

);

4.傳送/接收資料

//成功返回傳送的bytes失敗返回socket_error

int send(

socket s, //第二步建立的套接字

const

char far* buf,//要傳送的資料

int len, //資料的長度

int flags //設為0

);//成功返回接受到的bytes,連線關閉則返回0,失敗返回socket_error

int recv(

socket s, //第二步建立的套接字

char far* buf,//接收資料的快取區

int len, //快取區大小

int flags //設為0

);

5.關閉所有連線並清理

`

//成功返回0,失敗返回socket_error

int closesocket(

socket s

);

wsacleanup();//清理

SOCKET客戶端程式設計

1.建立socket物件 socket建構函式有4個引數,第乙個是family,代表位址家族af net,af net6等,第二個是type,套接字型別sock stream 流套接字 和sock dgram 資料報套接字 import socket s socket.socket socket.a...

socket程式設計 簡單的TCP客戶端

既然我們已經有了乙個tcp伺服器,因此可以建立 乙個簡單的tcp客戶機與它進行通訊。建立與tcp伺服器相連 的客戶機只有兩 步 1.建立乙個套接字 2.將套接字與遠端服務竭位址相連 建立客戶機如同伺服器編輯一樣,進行客戶機程式設計的第 一步是建立乙個socket物件.socketconnect 使用...

socket程式設計範本 客戶端

include include void main if lobyte wsadata.wversion 1 hibyte wsadata.wversion 1 socket sockclient socket af inet,sock stream,0 建立套接字 socket sockaddr ...