C Socket程式設計步驟

2021-07-27 10:16:10 字數 4486 閱讀 4850

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;

/*初始化socket資源*/

if (wsastartup(makeword(1,1),&wsa) != 0)

2.釋放方法:

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

voidmain()

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;

intlen=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 繫結套接字...