以下為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...