服务器端
/*基于TCP面向连接的 服务器*/
#include <iostream>
#include <WinSock2.h>
#include <stdlib.h>
#include <Ws2tcpip.h>
#pragma comment(lib,"Ws2_32.lib") //使用动态链接库用到
using namespace std;
#define _WINSOCK_DEPRECATED_NO_WARNINGS
void main()
{
//加载套接字
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 1);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
return;
}
if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup(); //关闭套接字
return;
}
//创建用于监听的套接字
SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0); //0自动选择协议
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);
//绑定套接字
bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
//将套接字设置为监听模式
listen(sockSrv, 5);
SOCKADDR_IN addrClient; //调用accept的时候先定义一个地址结构体的变量,用来接收客户端的地址信息
int len = sizeof(SOCKADDR);
while (1) //服务器应该永远等待为客户端服务
{
//等待客户的请求到来
SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len);
char sendBuf[100]; //
//char sendBuf[20] = {'\0'};
//inet_ntop(AF_INET,(void*)&addr2.sin_addr,sendBuf,16);
sprintf_s(sendBuf, 100, "Welcome %s to www.sunxin.org", inet_ntop(AF_INET,&addrClient.sin_addr,sendBuf,16));
//调用sprintf将一个数据格式化到buffer当中 //取地址
//发送数据
send(sockConn, sendBuf, strlen(sendBuf) + 1, 0);
char recvBuf[100]; //用来接收的字符数组
//接受数据
recv(sockConn, recvBuf, 100, 0);
//打印接受的数据
printf("%s\n", recvBuf);
//关闭套接字
closesocket(sockConn);
}
}
客户端
/*基于TCP面向连接的 客户端*/
#include <iostream>
#include <WinSock2.h>
#include <stdlib.h>
#include <Ws2tcpip.h>
#pragma comment(lib,"Ws2_32.lib") //使用动态链接库用到
using namespace std;
#define _WINSOCK_DEPRECATED_NO_WARNINGS
void main()
{
//加载套接字
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 1);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
return;
}
if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup(); //关闭套接字
return;
}
SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);//创建套接字
SOCKADDR_IN addrSrv;
struct in_addr s; // IPv4地址结构体
inet_pton(AF_INET, "127.0.0.1", (void*)&addrSrv.sin_addr.S_un.S_addr);
//addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);
connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
char recvBuf[100];
recv(sockClient, recvBuf, 100, 0);
printf("%s\n", recvBuf);
send(sockClient, "This is zhangsan", strlen("This is zhangsan")+1,0);
closesocket(sockClient);
WSACleanup();//终止对套接字库的使用
}