服务端
//vc的第一套socket,第二套socket,可能存在冲突
#define WIN32_LEAN_AND_MEAN
#define _WINSOCK_DEPRECATED_NO_WARNINGS //也可以放到工程属性,预处理中
#include <windows.h>
#include <WinSock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
int main()
{
//启动Windows socket 2.x环境
WORD ver = MAKEWORD(2, 2);
WSADATA dat;
WSAStartup(ver, &dat);
//--用Socket API建立简易TCP服务端
//1.建立一个socket
SOCKET _sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
//2 bind绑定用于接受客户端连接的网络端口
sockaddr_in _sin = {};
_sin.sin_family = AF_INET;
_sin.sin_port = htons(4567);//host to net unsigned
_sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
//使用127.0.0.1可以防止外网访问
//启用本机全部的ip地址可以使用,INADDR_ANY
if (SOCKET_ERROR == bind(_sock, (sockaddr*)&_sin, sizeof(sockaddr_in)))
{
printf("错误,绑定网络端口失败...\n");
}
else
{
printf("绑定网络端口成功...\n");
}
//3 listen 监听网络端口
if (SOCKET_ERROR == listen(_sock, 5))
{
printf("错误,监听网络端口失败...\n");
}
else
{
printf("监听网络端口成功...\n");
}
//4 accept等待接受客户端连接
sockaddr_in clientAddr = {};
int nAddrLen = sizeof(clientAddr);
SOCKET _cSock = INVALID_SOCKET;
char msgBuf[] = "Hello, i'm Server.";
while (true)
{
_cSock = accept(_sock, (sockaddr*)&clientAddr, &nAddrLen);
if (INVALID_SOCKET == _cSock)
{
printf("错误,接受到无效客户端socket...\n");
break;
}
printf("新客户端加入:IP=%s\n", inet_ntoa(clientAddr.sin_addr));
//5 send向客户端发送一条数据
send(_cSock, msgBuf, strlen(msgBuf) + 1, 0);
}
//6 关闭套接字closesocket
closesocket(_sock);
//清除Windows socket环境
WSACleanup();
return 0;
}
客户端
#define WIN32_LEAN_AND_MEAN
#define _WINSOCK_DEPRECATED_NO_WARNINGS //也可以放到工程属性,预处理中
#include <windows.h>
#include <WinSock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
int main()
{
//启动Windows socket 2.x环境
WORD ver = MAKEWORD(2, 2);
WSADATA dat;
WSAStartup(ver, &dat);
//---------------------------
//--用Socket API建立简易TCP客户端
//1 建立一个socket
SOCKET _sock = INVALID_SOCKET;
_sock = socket(AF_INET, SOCK_STREAM, 0);
if (INVALID_SOCKET == _sock)
{
printf("错误,建立Socket失败...\n");
}
else
{
printf("建立Socket成功...\n");
}
//2 连接服务器connect
sockaddr_in _sin = {};
_sin.sin_family = AF_INET;
_sin.sin_port = htons(4567);//host to net unsigned
_sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
int ret = connect(_sock, (sockaddr*)&_sin, sizeof(sockaddr_in));
if (SOCKET_ERROR == ret)
{
printf("错误,连接服务端失败...\n");
}
else
{
printf("连接服务端成功...\n");
}
//3 接受服务器信息recv
char recvBuf[256] = {};
int nlen = recv(_sock, recvBuf, 256, 0);
if (nlen > 0)
{
printf("接收到数据:%s\n", recvBuf);
}
//4 关闭套接字closesocket
closesocket(_sock);
//清除Windows socket环境
WSACleanup();
getchar();
return 0;
}