TCP
服务端
1、初始化套接字库
2、创建监听套接字(socket())
3、为监听套接字绑定(bind())IP和Port
4、监听(listen())
5、接收连接(accept())
6、通信(send()、recv())
7、关闭套接字(closesocket())
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include <iostream>
using namespace std;
#pragma warning(disable:4996)
void StartServer()
{
WSADATA ws; //创建一个WSADATA结构体
WSAStartup(MAKEWORD(2, 2), &ws); //初始化win socket网络库,申请2.2的版本
// 定义套接字,使用TCP/IP协议,所以参数为为AF_INET和SOCK_STREAM
int nListen = socket(AF_INET, SOCK_STREAM, 0);
// 创建socket失败
if (nListen == -1)
{
cout << "Create socket failed!" << endl;
return;
}
sockaddr_in saddr;
saddr.sin_family = AF_INET;
saddr.sin_port = htons(8080); //绑定端口
saddr.sin_addr.s_addr = htonl(INADDR_ANY); //绑定本机IP,INADDR_ANY是0.0.0.0,泛指本机的意思
//saddr.sin_addr.s_addr = inet_addr(ip); // 绑定特定ip地址
// 使用bind给sock绑定IP地址和端口
// :: 表示用的是全局的函数
if (::bind(nListen, (sockaddr*)&saddr, sizeof(saddr)) != 0)
{
cout << "bind failed!" << endl;
return;
}
listen(nListen, 3); // 开启监听,设置最大连接数量为3个
while (true)
{
//接收客户端的连接
sockaddr_in caddr;
int len = sizeof(caddr);
// 读取用户连接信息,会创建新的socket,用来单独和这个客户端通信,后面两个参数要传指针,用