socket網路程式設計之一 客戶端和伺服器端介面函式

2022-08-23 15:33:13 字數 3279 閱讀 4179

以下為winsock。

1. socket網路程式設計分為客戶端和伺服器端,客戶端傳送請求,伺服器端進行應答;

建立連線時,伺服器端繫結埠監聽(bind&listen),客戶端傳送連線請求(connect),然後伺服器端接受請求accept,至此客戶端和伺服器端可以收發訊息。

需要注意:

1)建立socket前需要呼叫wsastartup,對socket進行初始化。

2)伺服器端的accept函式,第三個引數addrlen既是輸出,也是輸入引數,所以需要有初值sizeof(sockaddr);

accept(socket s, struct sockaddr far * addr,int far * addrlen);

2. 客戶端的幾個api:

初始化socket:

wversionrequested = makeword( 2, 0 );  

wsastartup(wversionrequested , &wsadata);

建立socket:

fd = socket(af_inet,sock_stream,0);

連線伺服器:

memset(&serveraddr,0,sizeof(serveraddr));

serveraddr.sin_family = af_inet;

serveraddr.sin_port = htons(800);

serveraddr.sin_addr.s_un.s_addr = inet_addr("192.168.0.22");

connfd = connect(clientfd,(sockaddr *)&serveraddr,sizeof(sockaddr));

傳送訊息:

send(fd,pbuf,10,0);

關閉socket:

closesocket(clientfd);

3.伺服器端的幾個api:

初始化socket:

wversionrequested = makeword( 2, 0 );  

wsastartup(wversionrequested , &wsadata);

建立socket:

fd = socket(af_inet,sock_stream,0);

繫結埠bind():

memset(&serveraddr,0,sizeof(serveraddr));

serveraddr.sin_family = af_inet;

serveraddr.sin_port = htons(800);

serveraddr.sin_addr.s_un.s_addr = htonl(inaddr_any);

bind(serverfd,(sockaddr *)&serveraddr,sizeof(sockaddr));

監聽埠listen:

listen(serverfd,1024);

connfd = connect(clientfd,(sockaddr *)&serveraddr,sizeof(sockaddr));

接受連線accept:

addrlen = sizeof(sockaddr); //需注意,addrlen是輸入輸入函式,必須先賦值再傳入accept。

connfd = accept(serverfd,(sockaddr *)&clientaddr,&addrlen);

接收訊息recv:

recv(connfd,buf,100,0); //此處socket用的是connfd.

關閉socket:

closesocket(fd);                  

4.客戶端程式:

#include

#include

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

int main()

;clientfd = socket(af_inet,sock_stream,0);

if(clientfd <0)

else

memset(&serveraddr,0,sizeof(serveraddr));

serveraddr.sin_family = af_inet;

serveraddr.sin_port = htons(800);

serveraddr.sin_addr.s_un.s_addr = inet_addr("192.168.0.22");

connfd = connect(clientfd,(sockaddr *)&serveraddr,sizeof(sockaddr));

if(connfd < 0 )

else

//sendto(clientfd,pbuf,uclen,(sockaddr *)&serveraddr,sizeof(sockaddr));

char pbuf[10] = "123456789";

send(clientfd,pbuf,10,0);

closesocket(clientfd);

return 0;

}5.伺服器端程式:

#include

#include

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

int main()

;serverfd = socket(af_inet,sock_stream,0);

if(serverfd <0)

else

memset(&serveraddr,0,sizeof(serveraddr));

serveraddr.sin_family = af_inet;

serveraddr.sin_port = htons(800);

serveraddr.sin_addr.s_un.s_addr = htonl(inaddr_any);

if(bind(serverfd,(sockaddr *)&serveraddr,sizeof(sockaddr)) < 0)

if(listen(serverfd,1024) < 0)

dorecv(connfd,buf,100,0);

printf("recv data: %s",buf);   

}while(1);

closesocket(serverfd);

return 0;

}6.參考書籍:

《深入理解計算機系統》十二章:網路程式設計

socket網路程式設計之一 客戶端和伺服器端介面函式

1.socket網路程式設計分為客戶端和伺服器端,客戶端傳送請求,伺服器端進行應答 建立連線時,伺服器端繫結埠監聽 bind listen 客戶端傳送連線請求 connect 然後伺服器端接受請求accept,至此客戶端和伺服器端可以收發訊息。需要注意 1 建立socket前需要呼叫wsastart...

socket網路程式設計之一 客戶端和伺服器端介面函式

以下為winsock。1.socket網路程式設計分為客戶端和伺服器端,客戶端傳送請求,伺服器端進行應答 建立連線時,伺服器端繫結埠監聽 bind listen 客戶端傳送連線請求 connect 然後伺服器端接受請求accept,至此客戶端和伺服器端可以收發訊息。需要注意 1 建立socket前需...

SOCKET客戶端程式設計

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