C++ TCP Server
用C++写网络程序需要winsock2.h这个头文件,还有添加一个ws2_32.lib的lib库.
VC++2005添加Lib库的方法
1 项目- Server属性- 配置属性- 连接器- 附加依赖项
2 #pragma comment(lib,"ws2_32.lib")
3 查找ws2_32.lib文件项目- 添加现有项,将ws2_32.lib作为文件添加到项目中去
为了简单化,暂不进行错误处理
在创建sock之前先要初始化
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
创建套接字
SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0);
AF_INET是address family internet的缩写
SOCKADDR_IN addrSrv;
SOCKADDR_IN结构包括地址簇,端口号,IP地址,填充位
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
INADDR_ANY表示不限制连接IP
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(1986);
创建TCP程序的步骤
bind(sockSrv,(SOCKADDR *) &addrSrv,sizeof(SOCKADDR));
listen(sockSrv,5);
htonl 是host to network long的缩写
一直等待客户端发送消息
while(true)
{ SOCKET sockConn = accept(sockSrv,(SOCKADDR *)&addrClient,&len);
char sendBuf[100]="服务端发送给客户端";
std::cout<<sendBuf<<endl;
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
std::cout<<recvBuf<<endl;
closesocket(sockConn);
}
sendBuf是发送给客户端的数据
recvBuf是接受的到的数据
完成源码
#include <Winsock2.h>
#include <iostream>.
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int main()
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(1986);
cout<<htons(1986);
bind(sockSrv,(SOCKADDR *) &addrSrv,sizeof(SOCKADDR));
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
while(true)
{
SOCKET sockConn = accept(sockSrv,
(SOCKADDR *) &addrClient,&len);
char sendBuf[100]="服务端发送给客户端";
std::cout<<sendBuf<<endl;
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
std::cout<<recvBuf<<endl;
closesocket(sockConn);
}
return 0;
}
在VC++2005下调试通过