sockets(套接字)程式設計有三種,流式套接字(sock_stream),資料報套接字(sock_dgram),原始套接字(sock_raw);基於tcp的socket程式設計是採用的流式套接字。
伺服器端程式設計的步驟:
1:載入套接字型檔,建立套接字(wsastartup()/socket());
2:繫結套接字到乙個ip位址和乙個埠上(bind());
3:將套接字設定為監聽模式等待連線請求(listen());
4:請求到來後,接受連線請求,返回乙個新的對應於此次連線的套接字(accept());
5:用返回的套接字和客戶端進行通訊(send()/recv());
6:返回,等待另一連線請求;
7:關閉套接字,關閉載入的套接字型檔(closesocket()/wsacleanup())。
客戶端程式設計的步驟:
1:載入套接字型檔,建立套接字(wsastartup()/socket());
2:向伺服器發出連線請求(connect());
3:和伺服器端進行通訊(send()/recv());
4:關閉套接字,關閉載入的套接字型檔(closesocket()/wsacleanup())。
第一式: 載入/釋放winsock庫:
1.載入方法:
wsadata wsa;2.釋放方法:/*初始化socket資源*/
if (wsastartup(makeword(1,1),&wsa) != 0)
wsacleanup();第二式: 構造socket:1.服務端:構造監聽socket,流式socket.
socketlisten_sock= socket(af_inet, sock_stream, 0)
2.客戶端:構造通訊socket,流式socket.
socketclient_sock = socket(af_inet, sock_stream, 0)
第三式:配置監聽位址和埠:
1.服務端: sockaddr_inserveraddr
zeromemory((char *)&serveraddr,sizeof(serveraddr));
serveraddr.sin_family =af_inet;
serveraddr.sin_port = htons(1234); /*本地監聽埠:1234*/
serveraddr.sin_addr.s_addr = htonl(inaddr_any); /*有ip*/
第四式: 繫結socket:
1.服務端:繫結監聽socket.
bind(listen_sock,(struct sockaddr *)&serveraddr,sizeof(serveraddr))
第五式: 服務端/客戶端連線:
1.服務端:等待客戶端接入.
socketcommand_sock= accept(listen_sock, ...)
2.客戶端:請求與服務端連線.
int ret = connect(client_sock, ...)
第六式: 收/發資料:
1.服務端:等待客戶端接入.char buf[1024].
接收資料:recv(command_sock,buf, ...)
或傳送資料:send(command_sock,buf, ...)
2.客戶端:請求與服務端連線.char buf[1024].
傳送資料:send(client_sock,buf, ...)
或接收資料:recv(client_sock,buf, ...)
第七式: 關閉socket:
1.服務端:關閉socket.
closesocket(listen_sock)
closesocket(command_sock)
2.客戶端:關閉socket.
closesocket(client_sock)
#include
#include
void
main()
if
( lobyte( wsadata.wversion ) != 1 ||
hibyte( wsadata.wversion ) != 1 )
socket socksrv=socket(af_inet,sock_stream,0);
sockaddr_in addrsrv;
addrsrv.sin_addr.s_un.s_addr=htonl(inaddr_any);
addrsrv.sin_family=af_inet;
addrsrv.sin_port=htons(6000);
bind(socksrv,(sockaddr*)&addrsrv,
sizeof
(sockaddr));
listen(socksrv,5);
sockaddr_in addrclient;
int
len=
sizeof
(sockaddr);
while
(1)
}
#include<
stdio.h
>
#include
<
winsock2.h
>
void
main()
if( lobyte( wsadata.wversion ) !=1
||hibyte( wsadata.wversion ) !=1
) socket sockclient
=socket(af_inet,sock_stream,0);
sockaddr_in addrsrv;
addrsrv.sin_addr.s_un.s_addr
=inet_addr(
"127.0.0.1");
addrsrv.sin_family
=af_inet;
addrsrv.sin_port
=htons(
6000
); connect(sockclient,(sockaddr*)
&addrsrv,
sizeof
(sockaddr));
send(sockclient,
"hello
",strlen(
"hello")
+1,0
); char
recvbuf[
50];
recv(sockclient,recvbuf,50,
0);printf(
"%s\n
",recvbuf);
closesocket(sockclient);
wsacleanup();
}
C socket程式設計步驟
sockets 套接字 程式設計有三種,流式套接字 sock stream 資料報套接字 sock dgram 原始套接字 sock raw 基於tcp的socket程式設計是採用的流式套接字。伺服器端程式設計的步驟 1 載入套接字型檔,建立套接字 wsastartup socket 2 繫結套接字...
C Socket程式設計步驟
sockets 套接字 程式設計有三種,流式套接字 sock stream 資料報套接字 sock dgram 原始套接字 sock raw 基於tcp的socket程式設計是採用的流式套接字。伺服器端程式設計的步驟 1 載入套接字型檔,建立套接字 wsastartup socket 2 繫結套接字...
C Socket程式設計步驟
sockets 套接字 程式設計有三種,流式套接字 sock stream 資料報套接字 sock dgram 原始套接字 sock raw 基於tcp的socket程式設計是採用的流式套接字。伺服器端程式設計的步驟 1 載入套接字型檔,建立套接字 wsastartup socket 2 繫結套接字...