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())。
具体操作
1、 加载/释放Winsock库
1)加载方法:
WSADATA wsa;//初始化socket资源
if (WSAStartup(MAKEWORD(1,1),&wsa) != 0)
{
return; //代表失败
}
2)释放方法:
WSACleanup();
2、构造SOCKET
1)服务端:构造监听SOCKET,流式SOCKET
SOCKET Listen_Sock = socket(AF_INET, SOCK_STREAM, 0);
2)客户端:构造通讯SOCKET,流式SOCKET
SOCKET Client_Sock = socket(AF_INET, SOCK_STREAM, 0);
3、服务端配置监听地址和端口:
SOCKADDR_IN serverAddr
ZeroMemory((char *)&serverAddr,sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(1234); //本地监听端口:1234
4、服务端绑定监听SOCKET
bind(Listen_Sock,(struct sockaddr *)&serverAddr,sizeof(serverAddr));
5、服务端/客户端连接
1)服务端:等待客户端接入
SOCKET Command_Sock = accept(Listen_Sock, ...);
2)客户端:请求与服务端连接
int ret = connect(Client_Sock, ...);
6、收/发数据
1)服务端:等待客户端接入.
char buf[1024];
接收数据:recv(Command_Sock,buf, ...);
或
发送数据:send(Command_Sock,buf, ...);
2)客户端:请求与服务端连接
char buf[1024];
发送数据: