服务器端:
1、创建一个套接字,并调用bind()与本机地址绑定。
2、将套接字设置为监听模式。
3、通过accept()来接受客户端的连接。当客户端连接时,accept返回新的SOCKET。
4、使用新的SOCKET与客户端通信。
客户端:
1、创建一个套接字。
2、向服务器地址调用connect(),初始化连接。
3、连接成功后使用SOCKET于服务器端通信。
收发数据:
send:向已建立连接的套接字发送数据。
recv:从已建立连接的套接字收数据。阻塞式的,收到数据后返回。
数据的收发都是以char为单位。
关闭连接:
shutdown:表示不再此套接字上收发数据。
closesocket:关闭套接字
服务器端:
//初始化使用socket函数要用到的dll
WSADATA wd;
::WSAStartup(MAKEWORD(2,2), &wd);
//本机地址信息
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(1555);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
//创建套接字,并与本机地址绑定
SOCKET s = ::socket(AF_INET, SOCK_STREAM, 0);
::bind(s, (const sockaddr*)&addr, sizeof(addr));
//监听该套接字,准备接收连接
::listen(s, 2);
//等待客户端连接,若客户端连接则返回,否则一直等待
//返回结果是用来通信的新套接字
sockaddr_in client_addr;
SOCKET ns = ::accept(s, (sockaddr*)&client_addr, NULL);
//在新套接字上收数据
while(1)
{
char cBuffer[1024] = {0};
::recv(ns, cBuffer, 1024, 0);
cout<<cBuffer<<endl;
}
//关闭套接字
::closesocket(ns);
::closesocket(s);
//ws2.dll的收尾工作
::WSACleanup();
客户端:
//初始化使用socket函数要用到的dll
WSADATA wd;
WSAStartup(MAKEWORD(2,2), &wd);
//服务器地址信息
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(1555);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
//创建套接字,并与服务器连接
SOCKET s = ::socket(AF_INET, SOCK_STREAM, 0);
::connect(s, (const sockaddr*)&addr, sizeof(addr));
//发送数据
while(1)
{
char cData[1024] = {0};
cin>>cData;
::send(s, cData, (int)strlen(cData)+1, 0);
}
//关闭套接字
::closesocket(s);
//ws2.dll的收尾工作
::WSACleanup();