vc socket程式設計

2021-05-21 19:04:08 字數 3341 閱讀 6216

sockets(套接字)程式設計有三種,流式套接字(sock_stream),資料報套接字(sock_dgram),原始套接字(sock_raw); 基於tcp的socket程式設計是採用的流式套接字。在這個程式中,將兩個工程新增到乙個工作區。要鏈結乙個ws2_32.lib的庫檔案。

伺服器端程式設計的步驟:

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())。

以下為示例**:

1.tcp伺服器端:

#include

#include

#pragma   comment(lib,   "wsock32.lib")

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)

}2.tcp客戶端:

#include

#include

#pragma   comment(lib,   "wsock32.lib")

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));

char recvbuf[100];

recv(sockclient,recvbuf,100,0);

printf("%s/n",recvbuf);

send(sockclient,"this is lisi",strlen("this is lisi")+1,0);

closesocket(sockclient);

wsacleanup();

}3.udp伺服器端:

#include

#include

#pragma   comment(lib,   "wsock32.lib")

void main()

if ( lobyte( wsadata.wversion ) != 1 ||

hibyte( wsadata.wversion ) != 1 )

socket socksrv=socket(af_inet,sock_dgram,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));

sockaddr_in addrclient;

int len=sizeof(sockaddr);

char recvbuf[100];

recvfrom(socksrv,recvbuf,100,0,(sockaddr*)&addrclient,&len);

printf("%s/n",recvbuf);

closesocket(socksrv);

wsacleanup();

}4.udp客戶端:

#include

#include

#pragma   comment(lib,   "wsock32.lib")

void main()

if ( lobyte( wsadata.wversion ) != 1 ||

hibyte( wsadata.wversion ) != 1 )

socket sockclient=socket(af_inet,sock_dgram,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);

sendto(sockclient,"hello",strlen("hello")+1,0,

(sockaddr*)&addrsrv,sizeof(sockaddr));

closesocket(sockclient);

wsacleanup();

}

vc socket程式設計

sockets 套接字 程式設計有三種,流式套接字 sock stream 資料報套接字 sock dgram 原始套接字 sock raw 基於tcp的socket程式設計是採用的流式套接字。伺服器端程式設計的步驟 1 載入套接字型檔,建立套接字 wsastartup socket 2 繫結套接字...

VC SOCKET 程式設計小示例

server.cpp 定義控制台應用程式的入口點。include stdafx.h include include define true 1 define false 0 define buf max lenth 1024 pragma comment lib,wsock32.lib int ma...

VC socket 傳送類物件

假設你用這個類定義了乙個物件dt,那麼可以用 send sock,dt,sizeof dt 0 來一次性傳送。接收端,定義乙個指標 data pdt new dt 用 recv sock,pdt,sizeof dt 0 來接收。可以實現,跟結構體差不多。我試過了,有問題hi我哈 如下 服務端 cla...