1.新建一个工作区 Tcp
在工作区中添加两个工程 TcpSrv(服务端)和TcpClient (客户端)
2.在工程TcpSrv添加TcpSrv.cpp文件
代码如下:
#include <WINSOCK2.H>
#include <stdio.h>
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);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //htonl() 将主机的无符号长整形数转换成网络字节顺序
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000); //htons() 将主机的无符号短整形数转换成网络字节顺序
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); //将套接字绑定到一个已知的地址上
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
while (1)
{
SOCKET sockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len);
char sendBuf[100];
sprintf(sendBuf,"Welcome %s to http://www.sunxin.org", //sprintf 把格式化的数据写入某个字符串中
inet_ntoa(addrClient.sin_addr)); //inet_ntoa将一个IP转换成一个互联网标准点分格式的字符串
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
printf("%s\n",recvBuf);
closesocket(sockConn);
}
}
编译时会报错,添加链接库文件 ws2_32.lib
3.在工程TcpClient中添加 TcpClient.cpp 文件
代码如下
#include <WINSOCK2.H>
#include <stdio.h>
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;
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)); //连接 建立socket连线
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(); //中止Winsock 2 DLL (Ws2_32.dll) 的使用
}
同样添加库文件ws2_32.lib 记得前面有个空格
4.先运行服务端程序后运行客户端程序会看到效果