和服務端原理差不多,只是少了兩個步驟.
客戶端:
初始化套接字(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 ...